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

视频讲解:https://www.bilibili.com/video/BV1U84y1q7Ci

posted @ 2024-02-18 11:16  o蹲蹲o  阅读(6)  评论(0编辑  收藏  举报