Subset

Question

Given a list of numbers that may has duplicate numbers, return all possible subsets

Example If S = [1,2,2], a solution is:

[
  [2],
  [1],
  [1,2,2],
  [2,2],
  [1,2],
  []
]

Note Each element in a subset must be in non-descending order.

The ordering between two subsets is free.

The solution set must not contain duplicate subsets.

Thoughts

先sort就可以在连续相同的元素时只使用一个,就可以避免重复的subset

Solution

class Solution:
    """
    @param S: A set of numbers.
    @return: A list of lists. All valid subsets.
    """
    def subsetsWithDup(self, S):
        # write your code here
        self.resultList = []
        self.S = S
        self.S.sort()
        self.subsetsHelper([], 0)
        return self.resultList

    def subsetsHelper(self, curList, pos):
        newList = list(curList)
        self.resultList.append(newList)

        for i in range(pos, len(self.S)):
            if i != pos and self.S[i-1] == self.S[i]:
                continue
            curList.append(self.S[i])
            self.subsetsHelper(curList, i + 1)
            curList.pop()