这道题是第78题的升级版,78题中所给数组的元素都是不相同的,所以直接回溯搞一发,每个元素都加或不加搞一发即可。然而这道题中元素可能是相同的,所以不能直接每个元素加或不加来搞。比如样例中的[1, 2, 2],只加前面的那个2和只加后面那个2的结果是重复的,所以需要对相同的数进行判断。
在78题中,一个长为l的数组,子集list的第一个元素可以是数组中的每一个元素,第二个元素就是第一个元素的索引之后的数组中的每一个元素,以此类推。解法如下:
class Solution:
def subsets(self, nums: List[int]) -> List[List[int]]:
output = []
l = len(nums)
def backtrack(begin: int, cur: List[int]):
output.append(cur[:])
for i in range(begin, l):
cur.append(nums[i