【题目】:
Given a set of distinct integers, nums, return all possible subsets (the power set).
Note: The solution set must not contain duplicate subsets.
For example,
If nums = [1,2,3]
, a solution is:
[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]
【思路】:非递归实现
① 最外层循环逐一从 nums 数组中取出每个元素 num,初始化最终结果集为result
② 内层循环从result中取出当前所有的中间结果集,并向每个中间结果集中添加该 num 元素
③ 往每个中间结果集中加入num
④将新的中间结果集介入到result中
【例子】:nums=[1,2,3],最终结果集result=[[]]
1.最外层循环到1,即当前num为1:内层循环取出所有result的结果集,只有一个空集:[],把1加入到[]中变为[1],此时result变为[[],[1]],内层循环结束
2.最外层循环到2,即当前num为2,内层循环取出所有的result的结果集:[],[1],并在这两个结果集中分别把2加进去得到[2],[1,2],result变为[[],[1],[1,2],[2]]
3.最外层循环到3,即当前num为3,内层循环取出所有的result的结果集:[],[1],[1,2],[2],并在这4个结果集中分别把3加进去得到[3],[1,3],[1,2,3],[2,3],result变为[[],[1],[1,2],[2],[3],[1,3],[1,2,3],[2,3]]
【Python代码1】:
class Solution(object):
def subsets(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
result = [[]]
for num in nums:
result += [i+[num] for i in result ]
return result
【Python代码2-回溯法】:
class Solution(object):
def subsets(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
result = []
if not nums:
return result
self.helper(result, [], nums, 0)
return result
def helper(self, result, lt, nums, index):
result.append(lt[:])
for i in range(index, len(nums)):
lt.append(nums[i])
self.helper(result, lt, nums, i+1)
lt.remove(lt[-1])