25_03_11 & 03_12 & 03_13 太好了是回溯我们有救了
回溯剪枝到底剪了个什么东西
c++字符转数字:ch - '0'; 字符串转数字: stoi(str) / stol(str)
https://leetcode.cn/problems/combination-sum/submissions/609261736/
- 1.组合总和:导致重复的原因是回望过度了,题意其实是可以重复调用同一个值(?),不设置start 会怎么样?为什么?
https://leetcode.cn/problems/combination-sum-ii/description/
- 2.组合总和II:如果同层出现重复?
https://leetcode.cn/problems/palindrome-partitioning/description/
- 3.分割回文串:切下之后的下一个起点是哪里?
(切割问题的start实际上是在start和下一位中间进行切割,理解这一点就明白子集问题为什么会是在start > nums.size() 的时候return 了))
https://leetcode.cn/problems/restore-ip-addresses/description/
- 4.复原IP地址:虽然简单,小改几下就过了,但,有没有一次就过的好方法呢?
https://leetcode.cn/problems/subsets-ii/description/
-
5.子集II:同一树枝可以用,同一树层不可以用,used[i]是用来判断是同一树枝还是同一树层的,

-
6.递增子序列:同一父节点下不能重复使用同一值的节点
思考一下下面这两张图片为什么有一个可以用used数组判断同层是否使用,另一个不行呢?


全排列确实是没有start,但是多了一个东西,是什么呢?
https://leetcode.cn/problems/reconstruct-itinerary/description/
- 7.重新安排行程:这种时候(?)最好用二维哈希表,时间效率最优
https://leetcode.cn/problems/sudoku-solver/description/
- 8.解数独:想一想回溯的过程是怎么一回事,每次回溯的下一步是要干什么
总结:一种用来解决for枚举不能确定for个数的枚举方法(回溯还是太好写了,毕竟有模板)

浙公网安备 33010602011771号