代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可

@param S int整型一维数组

@return int整型二维数组

#写了备注方便回头复习

def subsets(self , S: List[int]) -> List[List[int]]:
    if not S:
        return [[]]
    res = []
    #每次把一个res送进下一层递归里,这样下一层初始就是[1],[2]这种,在下一层就是[1,2],[1,3]这种
    def dfs(dummy,tmp):  #dummy用来标记哪层递归
        res.append(tmp[:])#每次到下一层递归的时候,这个tmp就本身也是一种子集,所以先加入答案里
        for i in range(dummy,len(S)):
            tmp.append(S[i])
            dfs(i+1,tmp) #带上有点东西的tmp从‘1开始’到‘2开始’。
            tmp.pop() #把tmp清空,方便本层遍历时不会累计,每次递归的一遍遍历只加入一个值
    dfs(0,[])
    return res