弟中弟的Leetcode总结——数组类(九)
题目描述
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],
[]
]
思路
题目是求出给定元素的所有子集。与之前做过的combination sum类似,使用回溯法,走遍所有可能的路径。注意的是需要在规定不同长度的集合的条件下分别进行回溯。
代码(py3)
class Solution:
def backtrack(self,nums,contain,tempset,ans,start):
#如果长度够了,直接添加到最终结果中
if(contain==0):
t=tempset[:]
ans.append(t)
return
else:
#进行回溯
for i in range(start,len(nums)):
tempset.append(nums[i])
self.backtrack(nums,contain-1,tempset,ans,i+1)
tempset.pop()
def subsets(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
ans=[[]]
for i in nums:
ans.append([i])
leng=len(nums)
visit=[0]*leng
#确定子集的长度
for i in range(1,len(nums)):
temp=[]
#按照长度进行回溯
self.backtrack(nums,i+1,temp,ans,0)
return ans