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


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

    一、216.组合总和III

    题目链接:https://leetcode.cn/problems/combination-sum-iii/
    思路:模板题

    class Solution {
        List<List<Integer>> arrayList = new ArrayList<>();
        List<Integer> list = new ArrayList<>();
        int sum = 0;
        public List<List<Integer>> combinationSum3(int k, int n) {
            backTracking(k, n, 1);
            return arrayList;
        }
        void backTracking(int k, int n, int index) {
            if (list.size() < k && sum > n) return;
            if (list.size() == k && sum == n) {
                arrayList.add(new ArrayList<>(list));
                return;
            }
            for (int i = index; i <= 9; i++) {
                list.add(i);
                sum += i;
                backTracking(k, n, i+1);
                list.remove(list.size()-1);
                sum -= i;
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    二、17.电话号码的字母组合

    题目链接:https://leetcode.cn/problems/letter-combinations-of-a-phone-number/
    思路:每次递归选取的集合需要改变

    class Solution {
        List<String> list = new ArrayList<>();
        StringBuilder builder = new StringBuilder();
        public List<String> letterCombinations(String digits) {
            if (digits.length() == 0) return list;
            String[] init = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
            String[] strList = new String[digits.length()];
            for (int i = 0; i < digits.length(); i++) {
                strList[i] = init[digits.charAt(i) - '0'];
            }
            backTracking(strList, 0);
            return list;
        }
        void backTracking(String[] strList, int index) {
            if (builder.length() == strList.length) {
                list.add(builder.toString());
                return;
            }
            String strings = strList[index];
            for (int i = 0; i < strings.length(); i++) {
                builder.append(strings.charAt(i));
                backTracking(strList, index + 1);
                builder.deleteCharAt(index);
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
  • 相关阅读:
    【书城项目】第二阶段-用户注册和登陆
    【深蓝学院】手写VIO第6章--视觉前端--作业(SVD分解部分复习)
    责任链模式(Chain of Responsibility)
    第五章:方法
    B树与B+树与Mysql innodb的B+树和其相关索引
    Topic 19. 临床预测模型之输出每个患者列线图得分 (nomogramFormula)
    C#中ThreadPool线程池的使用总结
    Linux内核详解与内核优化方案
    vue.js事件处理
    前端面试(3)—— CSS盒模型及BFC
  • 原文地址:https://blog.csdn.net/qq_43511039/article/details/132926723