day28 回溯算法part4 代码随想录算法训练营 78. 子集
题目:78. 子集
我的感悟:
- 看见弹幕是秒了,我有点不敢相信,自己试了试,没有通过,再看了一眼文字讲解。
- 感觉懂了点
理解难点:
- 这题可以没有终止条件,开始我就疑惑这个终止条件怎么写
- 注意这个nums[i]要添加进入
- 是可以不写终止的,不会出现无线递归的,
- 因为是从i+1开始,
- 那会不会越界??,不会,最后到那个越界的时候,就循环结束了。
- 并且for循环下面是有一个隐藏的return的
代码难点:
- 有终止条件,就是筛选过滤,取最后的那个叶子节点,
- 这道题,是求每次迭代的节点。都取一遍,所以,可以没有终止条件
代码示例:
class Solution:
def subsets(self, nums: List[int]) -> List[List[int]]:
res = []
self.backtracking(nums,0,[],res)
return res
def backtracking(self,nums,start_index,path,result):
result.append(path[:])
for i in range(start_index,len(nums)):
path.append(nums[i]) # 注意这个nums[i]而不是i
self.backtracking(nums,i+1,path,result)
path.pop()
通过截图:
扩展写法:
资料:
78.子集
子集问题,就是收集树形结构中,每一个节点的结果。 整体代码其实和 回溯模板都是差不多的。
题目链接/文章讲解:https://programmercarl.com/0078.%E5%AD%90%E9%9B%86.html