# 78from typing import List
import copy
classSolution:# 方法1: 扩展法defsubsets_1(self, nums: List[int])-> List[List[int]]:
result =[]
result.append([])for n in nums:
temp =[]for res in result:
r = copy.deepcopy(res)
r.append(n)
temp.append(r)for t in temp:
result.append(t)return result
# 方法2: 回溯法defsubsets_2(self, nums: List[int])-> List[List[int]]:
result =[]
result.append([])for i inrange(1,len(nums)+1):
self.backtracking(nums, result, i,0,[])# i 表示数组长度, index 表示当前序号return result
defbacktracking(self, nums, result, length, index, subset):iflen(subset)== length:
temp = copy.deepcopy(subset)
result.append(temp)returnfor i inrange(index,len(nums)):
subset.append(nums[i])
self.backtracking(nums, result, length, i +1, subset)
subset.pop()# 方法3: 分治法defsubsets_3(self, nums: List[int])-> List[List[int]]:
result =[]
self.dfs(nums, result,0,[])return result
defdfs(self, nums, result, index, subset):
result.append(copy.deepcopy(subset))if index ==len(nums):returnfor i inrange(index,len(nums)):
subset.append(nums[i])
self.dfs(nums, result, i +1, subset)
subset.pop()