Leetcode 90.子集II - Subset II - Python - 回溯法

解题思路:

1.此题与Leetcode78.子集,类似。但是加了一个条件就是给定的nums不是唯一的。

2.需要注意的是纵向的树枝重复是允许的,而横向的数层重复需要规避,规避代码:

            if i > start and nums[i] == nums[i-1]:
                continue

注意:

1.是i > start,这些边缘的位置要考虑清楚。

代码:

class Solution(object):
    result = []
    path = []
    def subsetsWithDup(self, nums):
        self.result = []
        nums.sort()
        self.trackBack(nums, 0)
        return self.result
    
    def trackBack(self, nums, start):
        self.result.append(self.path[:])

        for i in range(start, len(nums)):
            if i > start and nums[i] == nums[i-1]:
                continue
            self.path.append(nums[i])
            self.trackBack(nums, i+1)
            self.path.pop()

你可能感兴趣的:(leetcode,python,算法,数据结构)