代码随想录算法训练营第二十五天 216.组合总和III、17.电话号码的字母组合
代码随想录算法训练营第二十五天 216.组合总和III、17.电话号码的字母组合
216.组合总和III
题目链接:力扣题目链接
文章讲解:代码随想录(https://programmercarl.com)
视频讲解:和组合问题有啥区别?回溯算法如何剪枝?| LeetCode:216.组合总和III
状态:AC
思路
定义result
存放总结果,path
存放单次结果。递归层数由k
决定
递归函数构造:
- 无返回值类型
- 需要传参
k
确定递归次数 - 传参
n
用于比较和 - 传参
index
确定当前递归索引 - 传参
sum
为当前和
递归结束条件:当
path
长度等于k
说明打到了需求长度,并且sum == n
的时候,说明为想要的答案,将path
添加到result
当中。并且return
单次递归和剪枝:从
index
开始,到9结束。如果sum + i > n
则return
。每层先添加到path
,再向下index+1
代码
1 |
|
17. 电话号码的字母组合
题目链接:力扣题目链接
文章讲解:代码随想录(https://programmercarl.com)
视频讲解:还得用回溯算法!| LeetCode:17.电话号码的字母组合
状态:AC
思路
首先先保存各个数字对应了哪些字母,这里使用了字符类型,例如2对应了'a', 'b', 'c'
,使用二维数组保存。假设输入字符串是"234"

- 递归函数的构造:无返回值类型;每次要传参应该遍历哪一个
index
(words
哪一行)。判断第几行使用words[int(digits[i] - '0')]
- 递归终止条件:
path
的长度和字符串digits
长度相等,并且不等于0 - 单层递归逻辑:两重循环内,每次
index+1
代码
1 |
|
代码随想录算法训练营第二十五天 216.组合总和III、17.电话号码的字母组合
https://promisewang.github.io/post/5d63641c.html