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

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

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

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

组合,在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循环中,所以再为该位置放入新的值;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值