Given a set of distinct integers, nums, return all possible subsets (the power set).
Note: The solution set must not contain duplicate subsets.
Example:
Input: nums = [1,2,3]
Output:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
LeetCode:链接
1)组合|非递归实现:这种方法是一种组合的方式。
① 最外层循环逐一从 nums 数组中取出每个元素 num
② 内层循环从原来的结果集中取出每个中间结果集,并向每个中间结果集中添加该 num 元素
③往每个中间结果集中加入 num
④将新的中间结果集加入结果集中
注意浅拷贝的使用!!!
class Solution(object):
def subsets(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
res = [[]]
for num in nums :
# 使用浅拷贝,不改变列表中的列表元素值
for temp in res[:]:
# 使用浅拷贝,不改变原有的值
x = temp[:]
x.append(num)
res.append(x)
return res
2)回溯。
class Solution(object):
def subsets(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
ans,res=[],[]
self.solve(0, len(nums), nums, res, ans)
return ans
def solve(self,cur,n,nums,res,ans):
ans.append(res[:])
for i in range(cur,n):
res.append(nums[i])
self.solve(i+1, len(nums), nums, res, ans)
res.pop()