083:路径总和 II
LeetCode 113 https://leetcode.cn/problems/path-sum-ii/description/ 难度:中等 子集型回溯。 时间复杂度:\(O(n^2)\),其中 n 是二叉树的节点个数。对于「一条链 + 完全二叉树」这样的「扫帚型」二叉树,我们会在 O(n) 个叶子节点处,都去复制长为 O(n) 的 path,所以总的时间复杂度为 \(O(n^2)\)。 空间复杂度:O(n)。返回值不计入。 ...
LeetCode 113 https://leetcode.cn/problems/path-sum-ii/description/ 难度:中等 子集型回溯。 时间复杂度:\(O(n^2)\),其中 n 是二叉树的节点个数。对于「一条链 + 完全二叉树」这样的「扫帚型」二叉树,我们会在 O(n) 个叶子节点处,都去复制长为 O(n) 的 path,所以总的时间复杂度为 \(O(n^2)\)。 空间复杂度:O(n)。返回值不计入。 ...
LeetCode 39 https://leetcode.cn/problems/combination-sum/description/ 难度:中等 子集型回溯,选或不选。 类似完全背包,选的话递归到 dfs(i, left - candidates[i]),不选递归到 dfs(i + 1, left)。 时间复杂度:O(S),其中 S 为所有可行解的长度之和。从分析给出的搜索树我们可以看出时间复杂度取决于搜索树所有叶子节点的深度之和,即所有可行解的长度之和。在这题中,我们很难给出一个比较紧的上界,我们知道 \(O(n2^n)\) 是一个比较松的上界,即在这份代码中,n 个位置每次考虑选或者不选,如果符合条件,就加入答案的时间代价。但是实际运行的时候,因为不可能所有的解都满足条件,递归的时候我们还会用 target−candidates[idx]≥0 进行剪枝,所以实际运行情况是远远小于这个上界的。 空间复杂度:O(target)。除答案数组外,空间复杂度取决于递归的栈深度,在最差情况下需要递归 O(target) 层。 ...
LeetCode 78 https://leetcode.cn/problems/subsets/description/ 难度:中等 子集型回溯,选或不选。 时间复杂度:\(O(n2^n)\),其中 n 为 nums 的长度。每次都是选或不选,递归次数为一个满二叉树的节点个数,那么一共会递归 \(O(2^n)\) 次(等比数列和),再算上加入答案时复制 path 需要 O(n) 的时间,所以时间复杂度为 \(O(n2^n)\)。 空间复杂度:O(n)。返回值的空间不计。 ...
LeetCode 22 https://leetcode.cn/problems/generate-parentheses/description/ 难度:中等 选或不选。选就是左括号,不选就是右括号。左右括号的数量需要有约束,open 是左括号的数量。open < n 限制左括号至多填 n 个,i - open < open 限制右括号至多填 open 个。 时间复杂度:分析回溯问题的时间复杂度,有一个通用公式:路径长度 × 搜索树的叶子数。对于本题,它等于 O(n⋅C(2n,n))。但由于左右括号的约束,实际上没有这么多叶子,根据 Catalan 数,实际的时间复杂度为 O(C(2n,n))。 空间复杂度:O(n)。返回值的空间不计入。 ...
LeetCode 93 https://leetcode.cn/problems/restore-ip-addresses/description/ 难度:中等 子集型回溯题目,本题使用“枚举选哪个”方法。 dfs(i, start) i 表示第几段,start 表示这一段从第几个数字开始。当选够 4 段且所有数字都被使用时添加答案。 如果 s[start] 为 0,这一段只能是 0,dfs(i + 1, start + 1)。 如果不是 0,这一段的数据范围需要在 [1, 255]之间,如果超过 255 就 break。 时间复杂度:\(O(3^N \times m)\),m 为 s 的长度。 空间复杂度:O(N) ...
LeetCode 46 https://leetcode.cn/problems/permutations/description/ 难度:中等 这是一道回溯法的题目,本题适用于“枚举选哪个”方法。 时间复杂度:O(n⋅n!),其中 n 为 nums 的长度。搜索树中的节点个数低于 3⋅n!。实际上,精确值为 ⌊e⋅n!⌋,其中 e=2.718⋯ 为自然常数。有 O(n!) 个叶节点,每个叶节点花费 O(n) 的时间复制 path 数组,因此时间复杂度为 O(n⋅n!)。 空间复杂度:O(n)。返回值的空间不计入。 ...