算法训练营day25(回溯算法02:组合总和3,电话号码的字母组合)

第七章 回溯算法part02
 
今日内容: 
 
● 216.组合总和III
● 17.电话号码的字母组合
 
 详细布置 
 
 216.组合总和III 
 
如果把 组合问题理解了,本题就容易一些了。 
 
题目链接/文章讲解:https://programmercarl.com/0216.%E7%BB%84%E5%90%88%E6%80%BB%E5%92%8CIII.html   
视频讲解:https://www.bilibili.com/video/BV1wg411873x
 
 17.电话号码的字母组合 
 
本题大家刚开始做会有点难度,先自己思考20min,没思路就直接看题解。 
 
题目链接/文章讲解:https://programmercarl.com/0017.%E7%94%B5%E8%AF%9D%E5%8F%B7%E7%A0%81%E7%9A%84%E5%AD%97%E6%AF%8D%E7%BB%84%E5%90%88.html   
视频讲解:https://www.bilibili.com/video/BV1yV4y1V7Ug
往日任务
● day 1 任务以及具体安排:https://docs.qq.com/doc/DUG9UR2ZUc3BjRUdY  
● day 2 任务以及具体安排:https://docs.qq.com/doc/DUGRwWXNOVEpyaVpG  
● day 3 任务以及具体安排:https://docs.qq.com/doc/DUGdqYWNYeGhlaVR6 
● day 4 任务以及具体安排:https://docs.qq.com/doc/DUFNjYUxYRHRVWklp 
● day 5 周日休息
● day 6 任务以及具体安排:https://docs.qq.com/doc/DUEtFSGdreWRuR2p4 
● day 7 任务以及具体安排:https://docs.qq.com/doc/DUElCb1NyTVpXa0Jj 
● day 8 任务以及具体安排:https://docs.qq.com/doc/DUGdsY2JFaFhDRVZH 
● day 9 任务以及具体安排:https://docs.qq.com/doc/DUHVXSnZNaXpVUHN4 
● day 10 任务以及具体安排:https://docs.qq.com/doc/DUElqeHh3cndDbW1Q 
●day 11 任务以及具体安排:https://docs.qq.com/doc/DUHh6UE5hUUZOZUd0 
●day 12 周日休息 
●day 13 任务以及具体安排:https://docs.qq.com/doc/DUHNpa3F4b2dMUWJ3 
●day 14 任务以及具体安排:https://docs.qq.com/doc/DUHRtdXZZSWFkeGdE 
●day 15 任务以及具体安排:https://docs.qq.com/doc/DUHN0ZVJuRmVYeWNv 
●day 16 任务以及具体安排:https://docs.qq.com/doc/DUHBQRm1aSWR4T2NK 
●day 17 任务以及具体安排:https://docs.qq.com/doc/DUFpXY3hBZkpabWFY 
●day 18 任务以及具体安排:https://docs.qq.com/doc/DUFFiVHl3YVlReVlr 
●day 19 周日休息
●day 20 任务以及具体安排:https://docs.qq.com/doc/DUGFRU2V6Z1F4alBH  
●day 21 任务以及具体安排:https://docs.qq.com/doc/DUHl2SGNvZmxqZm1X 
●day 22 任务以及具体安排:https://docs.qq.com/doc/DUHplVUp5YnN1bnBL  
●day 23 任务以及具体安排:https://docs.qq.com/doc/DUFBUQmxpQU1pa29C 
●day 24 任务以及具体安排:https://docs.qq.com/doc/DUEhsb0pUUm1WT2NP

day25

组合求和

 class Solution {
   List<List<Integer>> result = new ArrayList<>();
   LinkedList<Integer> path = new LinkedList<>();
     int sum = 0;
   public List<List<Integer>> combinationSum3(int k, int n) {
     backTracking(n, k, 1);
     return result;
   }
 ​
   private void backTracking(int targetSum, int k, int startIndex) {
     // 减枝
     if (sum > targetSum) {
       return;
     }
 ​
     if (path.size() == k) {
       if (sum == targetSum) result.add(new ArrayList<>(path));
       return;
     }
 ​
     // 减枝 9 - (k - path.size()) + 1
     for (int i = startIndex; i <= 9 - (k - path.size()) + 1; i++) {
       path.add(i);
       sum += i;
       backTracking(targetSum, k, i + 1);
       //回溯
       path.removeLast();
       //回溯
       sum -= i;
     }
   }
 }

电话号码的字母组合

 class Solution {
     StringBuilder temp = new StringBuilder();
     List<String> result = new ArrayList<>();
     public List<String> letterCombinations(String digits) {
         if(digits == null || digits.length() == 0) return result;
         String[] numString = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
         backtricking(digits, numString,0);
         return result;
     }
     private void backtricking(String digits, String[] numString,int num){
         if( num == digits.length()){
             result.add(temp.toString());
             return;
         }
         String str = numString[digits.charAt(num) - '0'];
         for(int i = 0; i < str.length(); i++){
             temp.append(str.charAt(i));
             backtricking(digits,numString,num + 1);
             temp.deleteCharAt(temp.length() - 1);
         }
     }
 }

感谢大佬分享:

代码随想录-算法训练营day25【回溯算法02:组合总和III、电话号码的字母组合】-优快云博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值