90. subsets ii

class Solution(object):
    def subsetsWithDup(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        nums.sort()
        total = [[]]
        for i in range(1, len(nums) + 1):
            total += self.subsets_each(nums, i)
        return total

    def subsets_each(self, array, target):
        self.result = []
        for i in range(len(array)):
            self.helper([array[i]], array[i + 1:], target)
        return self.result

    def helper(self, temp_array, rest_array, target):
        if len(temp_array) == target:
            if temp_array not in self.result:
                self.result.append(temp_array)
        else:
            for i in range(len(rest_array)):
                temp_array2 = temp_array[:]
                temp_array2.append(rest_array[i])
                self.helper(temp_array2, rest_array[i + 1:], target)

if __name__ == '__main__':
    answer = Solution()
    print answer.subsetsWithDup([1,2,2])