题目内容
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
https://leetcode-cn.com/problems/subsets/
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],
[]
]
题目思路
这道题目的思路有两种,第一种是深度优先搜索二叉树。树的一枝就是随着每次深度增加添加对应的(在第i层插入nums[i])元素,树的另一枝就是只增加深度,但是不插入新的元素。在深度达到长度后,将这一枝的内容添加入结果中。
第二种思路就是先建立一个只含有空列的列表。然后从头到尾遍历整个字符串。每次取出一个元素,和结果列表中的元素组成新的元素集合后再插入结果列表中即可。这道题目的难点在于列表的格式不太好弄,容易出错。同时空集是非常重要的一个元素,不可忽略。
程序代码
方法1:
class Solution(object):
def subsets(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
if not nums:
return [nums]
path,res=[],[]
self.cal(nums,path,res,0)
return res
def cal(self,nums,path,res,index):
if index==len(nums):
res.append(path)
return
self.cal(nums,path,res,index+1)
self.cal(nums,path+[nums[index]],res,index+1)
方法2
class Solution(object):
def subsets(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
if not nums:
return [nums]
res=[[]]
#print(res)
for i in range(len(nums)):
tmpl=[]
for j in res:
tmp=j+[nums[i]]
tmpl.append(tmp)
res+=tmpl
#print(res)
return res