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

216. 组合总和 III

题目链接组合总和 III

题目描述
找出所有相加之和为 n 的 k 个数的组合,且满足下列条件:
只使用数字1到9
每个数字 最多使用一次
返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。

解题思路
本题和组合问题十分相似,按照剪支三部曲可以很好地解决。

代码实现

class Solution {
   
    List<List<Integer>> res = new ArrayList<>();
    List<Integer> path = new LinkedList<>();
    int start = 1;

    public List<List<Integer>> combinationSum3(int k, int n) {
   
        if (n < 0) {
   //当剩下元素和小于-剪支
            return res;
        }
        if (k == 0) {
   
            if (n == 0) {
   //当满足剩余元素和剩余和同时为零找到最终结果
                res.add(new ArrayList<>(path));
                return res;
            }
        }
        for (int i = start; i < 10; i++) {
   
            path.add(i);
            start=i+1;//防止重复从下一个元素开始
            combinationSum3(k - 1, n - i);
            path.removeLast();
        }
        return res;
    }
}

17. 电话号码的字母组合

题目链接电话号码的字母组合

题目描述
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

解题思路
本题也不是很难,只要搞清楚回溯法是横向遍历一层,纵向递归,
从本题题目上可以看出,横向遍历每到一个数字的代表字母,纵向递归输入字符串的每个字母,因此,回溯的终止条件就是递归到最后一个字母。如此就可根据回溯三部曲,比较简单地写出代码。

代码实现

class Solution {
   
    List<String> res = new ArrayList<>();//记录最终结果
    StringBuilder path = new StringBuilder();//记录过程中路径
    public List<String> letterCombinations(String digits) {
   
        if(digits == null||digits.length()==0){
   
            return res;
        }
        String[] numString = {
   "","", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};//对应2-9的代表字母
        backtraversal(digits,numString,0);
        return res;
    }
    public void backtraversal(String digits,String[] numString,int len){
   //len表示当前path中元素个数、
        //当len中元素等于输入字符串长度说明递归到最后
        if(len == digits.length()){
   
            res.add(path.toString());
            return ;
        }
        int n = digits.charAt(len)-'0';
        //横向遍历数字代表的字母
        for(int i =0 ; i<numString[n].length();i++){
   
            path.append(numString[n].charAt(i));
            backtraversal(digits,numString,len+1);
            path.deleteCharAt(len);
        }
    }
}

最近更新

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

    2024-02-04 06:54:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-04 06:54:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-04 06:54:02       82 阅读
  4. Python语言-面向对象

    2024-02-04 06:54:02       91 阅读

热门阅读

  1. linux系统haproxy负载均衡工具的介绍以及使用

    2024-02-04 06:54:02       63 阅读
  2. linux系统ansible工具剧本编写布置zabbix

    2024-02-04 06:54:02       42 阅读
  3. HTML面试题

    2024-02-04 06:54:02       48 阅读
  4. STM32的ADC采集传感器的模拟量数据

    2024-02-04 06:54:02       48 阅读
  5. 理解进位计数制:基数和位权

    2024-02-04 06:54:02       48 阅读
  6. PHP基于文本的简易搜索引擎

    2024-02-04 06:54:02       35 阅读