- 博客(8)
- 收藏
- 关注
原创 [LeetCode40. 组合总和 II]回溯
在同层遍历 i大于startIndex的情况下,如果当前元素和前一个元素相同,则跳过这个元素, i大于startIndex可以跳过树枝上的重复情况,只判断树层上的重复情况。这里有陷阱就是提供数组会有重复元素,而输出的组合不能有重复,所以要在搜索的过程中就去掉重复组合。树层表示横向的遍历,不能出现重复元素:[1, 2, 5]、[1, 2, 5],否则就会出现重复的组合。组合问题可以抽象为树形结构,那么“使用过”在这个树形结构上是有两个维度的,一个维度是同一。上使用过,一个维度是同一。
2023-05-18 21:18:26 42 1
原创 [LeetCode39. 组合总和] 回溯 + 剪枝
对于sum已经大于target的情况,其实是依然进入了下一层递归,只是下一层递归结束判断的时候,会判断sum > target的话就返回。其实如果已经知道下一层的sum会大于target,就没有必要进入下一层递归了。对总集合排序之后,如果下一层的sum(就是本层的 sum + candidates[i])已经大于target,就可以结束本轮for循环的遍历。
2023-05-18 21:16:01 33 1
原创 [LeetCode 216. 组合总和 III] 回溯
已选元素总和如果已经大于n了,那么往后遍历就没有意义了,直接剪掉。和上一题 [77. 组合] 一样,for循环的范围也可以剪枝,
2023-05-18 21:12:27 30 1
原创 [LeetCode 77.组合]回溯 + 剪枝
列表中剩余元素 (n - i) >= 所需需要的元素个数(k - path.size())为什么有个 +1 呢,因为包括起始位置,我们要是一个左闭的集合。所需需要的元素个数为: k - path.size();已经选择的元素个数:path.size();
2023-05-18 21:11:18 58
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人