78. 子集
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
输入: nums = [1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]
代码;
class Solution3(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
#### the second method
#### 类似于二叉树的前序遍历, 用DFS可以实现
self.results = []
self.search(sorted(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)
s = Solution3()
print(s.subsets([1,2,3]))
全排列
给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]代码如下:
class Solution(object):
def permute(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
if len(nums) <= 1:
return [nums]
res = []
for i, num in enumerate(nums):
n = nums[: i] + nums[i+1 :]
for x in self.permute(n):
res.append([num] + x)
return res