解题思路:
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()