复习回顾-回溯算法-90. 子集 II 【犹豫】

注意点&感悟:

  • 对过滤条件放在for里面,还是外面,有些犹豫了。【疑问,先搁置】
  • 我感觉
  • for 里面,应该是进去树枝的过程,
  • for 外面写,应该是终止条件。
  • ================
  • 又看了一眼视频,for里面是取数的过程,所以,应该取数的过程,进行了剪枝。

题目链接:90. 子集 II

自己独立写的代码:

class Solution:
    def subsetsWithDup(self, nums: List[int]) -> List[List[int]]:
        # 难点去重 利用排序 借助used
        nums.sort()
        res = []
        used = [0] * len(nums)
        self.backtracking(nums,0,[],res,used)
        return res

    def backtracking(self,nums,start_index,path,res,used):
        # 去重
        res.append(path[:])

        for i in range(start_index,len(nums)):
            if i > 0 and nums[i] == nums[i-1] and used[i-1] == 0:
                continue
            path.append(nums[i])
            used[i] = 1
            self.backtracking(nums,i+1,path,res,used)
            used[i] = 0
            path.pop()

通过截图:

posted @ 2024-02-19 09:12  o蹲蹲o  阅读(3)  评论(0编辑  收藏  举报