当前位置: 首页 > article >正文

代码随想录算法训练营第二十四天|216.组合总和III、17.电话号码的字母组合

文档讲解:216.组合总和III、17.电话号码的字母组合

题目链接:216.组合总和III、17.电话号码的字母组合

思路:

第一个题的思路和上一个做的组合题思路是一样的,组合题的模板一定要记住,套模板的时候要思路清晰。

第二题写的比较复杂了,首先将每一个按键都定义出来,然后每次递归回溯的时候记录的是当前按键是第几个,也就是第几层递归。

216.组合总和III

class Solution {
    List<List<Integer>> res = new ArrayList<>();
    List<Integer> path = new ArrayList<>();
    public List<List<Integer>> combinationSum3(int k, int n) {
        backTracking(k, n, 1, 0);
        return res;
    }
    public void backTracking(int k, int n, int startNum, int sum){
        if(sum>n || path.size()>k){
            return;
        }
        if(path.size()==k){
            if(sum == n){
                // res.add(new ArrayList<>(path));
                res.add(path);
                return;
            }
        }
        for(int i=startNum;i<=9; i++){
            path.add(i);
            sum+=i;
            backTracking(k, n, i+1, sum);
            sum-=i;
            // path.removeLast();
            path.remove(path.size()-1);
        }
    }
}

17.电话号码的字母组合

class Solution {
    List<String> res = new ArrayList<>();
    StringBuffer sb = new StringBuffer();
    String[] num0 = new String[]{};
    String[] num1 = new String[]{};
    String[] num2 = new String[]{"a", "b", "c"};
    String[] num3 = new String[]{"d", "e", "f"};
    String[] num4 = new String[]{"g", "h", "i"};
    String[] num5 = new String[]{"j", "k", "l"};
    String[] num6 = new String[]{"m", "n", "o"};
    String[] num7 = new String[]{"p", "q", "r", "s"};
    String[] num8 = new String[]{"t", "u", "v"};
    String[] num9 = new String[]{"w", "x", "y", "z"};
    String[][] str = new String[][]{num0, num1, num2,num3, num4, num5, num6, num7, num8, num9};
    public List<String> letterCombinations(String digits) {
        if (digits == null || digits.length() == 0) {
            return res;
        }
        backtracking(digits, 0);
        return res;

    }

    public void backtracking(String digits, int index){
        if(sb.length()==digits.length()){
            res.add(sb.toString());
            return;
        }
        int num = Integer.parseInt(String.valueOf(digits.charAt(index)));
        for(int i=0;i<str[num].length;i++){
            sb.append(str[num][i]);
            backtracking(digits, index+1);
            sb.deleteCharAt(sb.length()-1);
        }
    }
}

http://www.kler.cn/a/271910.html

相关文章:

  • ELK之使用Filebeat插件收集日志到Logstash
  • 算法思想总结:滑动窗口算法
  • 飞桨科学计算套件PaddleScience
  • [NCNN学习笔记]-1
  • 手机网络连接性能API接口:查询手机网络连接性能状态
  • 后端程序员入门react笔记(八)-redux的使用和项目搭建
  • 阿里云免费证书改为3个月,应对方法很简单
  • Jmeter——循环控制器中实现Counter计数器的次数重置
  • windows 免密码ssh登录linux;linux免密码ssh登录其他linux
  • 在根据卷积核大小计算padding时要遵循什么原则
  • MySQL语法分类 DQL(3)排序查询
  • ARM 汇编指令:(六) B 跳转指令
  • Java12~14 switch语法
  • QT文件的读取与插入
  • 【Linux】进程与可执行程序的关系fork创建子进程写实拷贝的理解
  • 金枪鱼群优化算法TSO优化BiLSTM-ATTENTION实现风力发电功率预测(matlab)
  • 蓝桥杯--平均
  • [漏洞分析]Fortinet FortiNAC CVE-2022-39952简析
  • JavaScript BOM 的概念(浏览器对象模型)
  • 栈和队列(Java实现)