回溯

#
# @param S int整型一维数组 
# @return int整型二维数组
#
class Solution:
    def subsets(self , S: List[int]) -> List[List[int]]:
        # res收集所有子集,track记录访问过的元素
        res,track = [],[]
        def backTrack(S,start,track):
            res.append(track[:])
            if len(track) == len(S):
                return 
            for i in range(start,len(S)):
                track.append(S[i])
                backTrack(S, i+1, track) # start=i+1,每次下标递增1,避免出现子集重复的情况,如[2,4]与[4,2]
                track.pop()
                
        backTrack(S, 0, track)
        return res