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

216.组合总和III

216. 组合总和 III - 力扣(LeetCode)
本题主要在于剪枝的过程,一个是在for循环中不需要遍历到9,只要到9-(k-path.size())+1即可,另外就是sum>targetSum时就可以直接结束,因为再往下循环会比sum还大

class Solution {
    List<Integer> path = new LinkedList<>();
    List<List<Integer>> result = new ArrayList<>();

    public List<List<Integer>> combinationSum3(int k, int n) {
        backTracking(n,0,k,1);
        return result;
    }

    public void backTracking(int targetSum, int sum, int k, int startIndex) {
        if (sum > targetSum) {
            return;
        }

        if (path.size() == k) {
            if (sum == targetSum){
                result.add(new ArrayList<>(path));
            }
            return;
        }

        for (int i=startIndex; i<=9-(k-path.size())+1; i++) {
            path.add(i);
            sum += i;
            backTracking(targetSum, sum, k, i+1);
            path.removeLast();
            sum -= i;
        }
    }
}

17.电话号码的字母组合

17. 电话号码的字母组合 - 力扣(LeetCode)
本题和之前的组合不同之处在于,需要遍历多个字符串,而不是在一个列表中处理,所以在for循环那里,不是i+1,而是num+1

class Solution {
    List<String> result = new ArrayList<>();
    StringBuilder temp = new StringBuilder();

    public List<String> letterCombinations(String digits) {
        if (digits == null || digits.length() == 0) {
            return result;
        }
        String[] numString = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
        backTracking(digits, numString, 1);
        return result;
    }

    //num表示第几个数字,从1开始
    public void backTracking(String digits, String[] numString, int num) {
        if (num == digits.length() + 1) {
            result.add(temp.toString());
            return;
        }
        //当前num对应的字符串
        String str = numString[digits.charAt(num-1) - '0'];
        for (int i=0; i<str.length(); i++) {
            temp.append(str.charAt(i));
            backTracking(digits, numString, num + 1);
            temp.deleteCharAt(temp.length() - 1);
        }
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容