给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
输入: nums = [1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]
解题思路:要列出所有的子集,考虑用递归。数组中的每个数字有两个状态,存在 和不存在。所以在构建子集时,就有选择和不选择两种情况,我们在构建二叉树时,左边为选择,右边为不选择。最后的叶子节点就是所要求的子集。
#递归
class Solution(object):
def subsets(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
self.results=[]
self.search(nums,[],0)
return self.results
def search(self,nums,S,index):
if(index==len(nums)):
self.results.append(S)
return
self.search(nums,S+[nums[index]],index+1)
self.search(nums,S,index+1)
也可以 考虑不用递归的方法,当数组是空的时候,得到的是[ ];当数组为1时,在上一步得到的[ ]中加个1,得到[1],再加上原来的[ ],得到[ ],[1];当再往数组里加个2的时候,可以在上一步得到的[ ],[1]中加入2,得到[2 ],[1,2],再加上原来的[ ],[1],就得到[ ],[1],2 ],[1,2],以此类推。
class Solution(object):
def subsets(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
results=[[]]
for i in nums:
results=results+[[i]+num for num in results]
return results

571

被折叠的 条评论
为什么被折叠?



