class Solution:
def subsets(self, nums: List[int]) -> List[List[int]]:
def huisu(nums,path,visited,index):
if path not in res:
print(path[:])
res.append(path[:])
for i in range(index,len(nums)):
if visited[i]:
continue
path.append(nums[i])
visited[i]=True
huisu(nums,path,visited,i+1)
visited[i]=False
path.pop()
visited = [False for i in range(len(nums))]
res = []
huisu(nums,[],visited,0)
return res
- 这个题目其实就是一个回溯算法的基本模板的应用
- 首先需要标记数组,第一层用过的和之前用过的都不能在用
- 满足跳出回溯的条件就是这个数组没在结果数组中出现
- 接下来就是遍历整个数组,对遍历过的数字进行标记
总结:回溯算法的基本模板,跳出的条件,不含重复的元素一定需要标记数组,然后就是遍历了。