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

题目链接: 216.组合总和III

题目链接/文章讲解: 代码随想录
视频讲解: 和组合问题有啥区别?回溯算法如何剪枝?| LeetCode:216.组合总和III_哔哩哔哩_bilibili

看完代码随想录之后的想法

组合,在1-9个数里选k个数,计算它们的和,如果满足sum == n ,就是一种情况;

假如我们就选2个数,我们可以只用两个for循环,每次循环选择一个数,两次循环选择两个数,

假如我们就选3个数,我们可以只用三个for循环,每次循环选择一个数,三次循环选择三个数,

 但是我们不确定有几个数,因此我们需要递归的方法来解决;

我们可以用path 列表临时存放k个数

同时要包含回溯;

首先回溯三部曲,第一步,参数,和 返回值;

第二步 终止条件 //当path的值等于k,说明已经选好k个数,就可以结束递归了同时判断是否满足条件,满足条件放入result 链表中 return ;

第三步 单次循环的过程;

我们需要用for 循环确定 每一次选的数,同时我们还要有startIndex ,来确定从哪个数开始;

sum 用来记录path的和,每一次递归都加上相应的值,回溯的时候把这个值去掉;

 题目链接:17.电话号码的字母组合。

题目链接/文章讲解:代码随想录

视频讲解:数组中移除元素并不容易! | LeetCode:27. 移除元素

看完代码随想录之后的想法:依旧使用递归 + 回溯的方法,for 循环是 每一次选一个然后递归选下一位,递归结束,回溯,然后选下一个;

今日收获

递归主要是确定下一位的,而for循环时一个位置不同的数;回溯是为了先把上一次该位置的数去掉,然后因为再for循环中,所以再为该位置放入新的值;

你可能感兴趣的:(代码随想录算法训练营,算法,数据结构)