代码随想录算法训练营第二十五天 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