*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
-
考点
- 回溯
- 剪枝
-
我的思路
- 回溯三要素
- 形参:目标和,组合大小,当前值,单个组合变量,结果变量;返回值为空
- 退出条件:(这个地方一开始没想明白,要注意的是,退出条件一定要能让所有递归过程退出)当单个组合变量的长度等于组合大小时,返回;如果大小相等的同时和值也等于目标和,则将该组合变量加入结果变量中
- 回溯逻辑
- 循环范围是当前值到9
- 首先把当前值加入单个组合变量
- 把当前值+1进行递归
- 把当前值弹出单个组合变量,完成回溯
- 循环范围是当前值到9
- 剪枝
- 在递归的开始,如果发现和值大于目标和,则直接return
- 在循环范围上,因为目标组合有大小限制,因此不需要遍历到9,设置range的上限为9 - (k - len(single_set)) + 2
- 回溯三要素
-
视频讲解关键点总结
- 关键点结合我的思路放在一起了
-
我的思路的问题
- 退出条件和剪枝操作的思考不全面
-
代码书写问题
- 无
-
可执行代码
class Solution:def backtracking(self, cur, k, n, single_set, result):if sum(single_set) > n:returnif len(single_set) == k:if sum(single_set, 0) == n:result.append(single_set[:])returnfor i in range(cur, 9 - (k - len(single_set)) + 2):single_set.append(i)self.backtracking(i + 1, k, n, single_set, result)single_set.pop()def combinationSum3(self, k: int, n: int) -> List[List[int]]:result = []self.backtracking(1, k, n, [], result)return result
17.电话号码的字母组合
题目链接/文章讲解: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
- 考点
- 回溯
- 我的思路
- 先创建字典来存放数字和字母的哈希映射
- 回溯三要素
- 形参:当前数字的索引,输入数字串,单个组合变量,结果变量,数字字母字典;返回值为空
- 退出条件:单个组合变量的长度等于输入数字串时,将单个组合变量加入结果变量,之后返回
- 回溯逻辑
- 循环范围为当前数字对应的字母集合
- 将字母加入单个组合变量
- 索引加一并递归
- 将当前字母弹出,完成回溯
- 循环范围为当前数字对应的字母集合
- 视频讲解关键点总结
- 和我的思路一致
- 我的思路的问题
- 无
- 代码书写问题
- 无
- 可执行代码
class Solution:def backtracking(self, index, digits, single_set, result, phone_table):if len(single_set) == len(digits):result.append(''.join(single_set))returnfor letter in phone_table[int(digits[index])]:single_set.append(letter)self.backtracking(index + 1, digits, single_set, result, phone_table)single_set.pop()def letterCombinations(self, digits: str) -> List[str]:if len(digits) == 0:return []phone_table = {2: ('a', 'b', 'c'), 3: {'d', 'e', 'f'}, 4: {'g', 'h', 'i'},5: ('j', 'k', 'l'), 6: {'m', 'n', 'o'}, 7: {'p', 'q', 'r', 's'},8: ('t', 'u', 'v'), 9: {'w', 'x', 'y', 'z'}}result = []self.backtracking(0, digits, [], result, phone_table)return result