算法练习第二十五天| 216.组合总和III、17.电话号码的字母组合

leetcode题目链接
17
216

216.组合总和III

class Solution {
    List<Integer> path = new ArrayList();
    List<List<Integer>> result = new ArrayList();
    public List<List<Integer>> combinationSum3(int k, int n) {
        backTrace(k,n,1,0);
        return  result;
    }
    public void backTrace(int k,int n,int startIndex,int sum){

        //结束条件
        if(path.size() == k){
            if(sum == n) result.add(new ArrayList(path));
            return;
        }

        for(int i = startIndex;i<=9-(k-path.size())+1;i++){
            sum += i;
            path.add(i);
            if (sum > n) { // 剪枝操作
                sum -= i; // 剪枝之前先把回溯做了
                path.removeLast(); // 剪枝之前先把回溯做了
                return;
            }
            backTrace(k,n,i+1,sum);
            sum -=i;
            path.removeLast();
        }
    }
}

17.电话号码的字母组合

class Solution {
    List<String> result = new ArrayList();
    static Map<Integer,String> map = new HashMap();
    StringBuilder tmp = new StringBuilder();
    static {
        map.put(2,"abc");
        map.put(3,"def");
        map.put(4,"ghi");
        map.put(5,"jkl");
        map.put(6,"mno");
        map.put(7,"pqrs");
        map.put(8,"tuv");
        map.put(9,"wxyz");
    }
    public List<String> letterCombinations(String digits) {
        if (digits == null || digits.length() == 0) {
            return result;
        }
        backTrace(digits,0);
        return result;
    }

    /**
        params:index遍历到第几个数字
     */
    public void backTrace(String digits,int index){
        //终止条件
        //这里为什么不是index==digits.length()-1???
        //需要理解遍历到这个最后的字符,和遍历完最后这个字符的区别
        if(index == digits.length()){
            result.add(tmp.toString());
            return;
        }
        int digit = digits.charAt(index) - '0';
        String s= map.get(digit);
        for(int i = 0;i<s.length();i++){
            tmp.append(s.charAt(i));
            backTrace(digits,index+1);
            tmp.deleteCharAt(tmp.length()-1);
        }

    }
}

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-22 17:50:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-22 17:50:06       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-22 17:50:06       82 阅读
  4. Python语言-面向对象

    2024-03-22 17:50:06       91 阅读

热门阅读

  1. oracle回收站管理

    2024-03-22 17:50:06       41 阅读
  2. Linux之看门狗

    2024-03-22 17:50:06       41 阅读
  3. Vuex 笔记

    2024-03-22 17:50:06       37 阅读
  4. 蓝桥杯B组C++省赛 全球变暖【bfs】

    2024-03-22 17:50:06       40 阅读
  5. 100个数字人口播嘴唇同步

    2024-03-22 17:50:06       35 阅读
  6. docker opensearch arm64 运行失败解决方案

    2024-03-22 17:50:06       33 阅读
  7. linux | && 和 &的妙用

    2024-03-22 17:50:06       40 阅读
  8. 黑客三字经

    2024-03-22 17:50:06       39 阅读