0
点赞
收藏
分享

微信扫一扫

IP-GUARD如何禁止修改文件后缀名

书坊尚 2024-09-26 阅读 21

90. 子集 II - 力扣(LeetCode)

思路:

题目中说明nums中可能包含重复元素,所以要去重。

去重的前提是将数组nums排序!

  • 递归参数:nums,index,path
  • 递归出口:当遍历完nums数组时return。
  • 单层递归逻辑:i从index开始遍历,如果当前元素与其上一个元素相等且当前元素不是起始位置(也就是在树形结构中不是最左边的子树,见下图),结束本次循环;将nums[i]加入path中,接着调用递归函数,最后pop出path的最后一个元素。

由于是求子集,所以每次进入递归时就要将path收集到result中。

class Solution(object):
    def back(self,nums,index,path):
        self.result.append(path[:])
        if index==len(nums):
            return
        for i in range(index,len(nums)):
            if i!=index and nums[i]==nums[i-1]:
                continue
            path.append(nums[i])
            self.back(nums,i+1,path)
            path.pop()

    def subsetsWithDup(self, nums):
        nums.sort()
        self.result=[]
        self.back(nums,0,[])
        return self.result
举报

相关推荐

0 条评论