1.题目
幂集。编写一种方法,返回某集合的所有子集。集合中不包含重复的元素。
说明:解集不能包含重复的子集。
2.示例
输入: nums = [1,2,3]
输出:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
3.分析
3.1.dfs回溯算法
1.输入0,从0-n遍历,遍历到哪个数就是找出包含这个数以及之后所有数的幂集。
2.即遍历到0就把0加进去,找剩余所有数的幂集。
3.2.找规律,递推公式
1.输入 0 -->[[]]
2.输入 1 -->[[],[1]]
3.输入 2 -->[[],[1],[2],[1,2]]
4.输入 3 -->[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
5.可以获得 递推公式: f(n) = f(n-1) + [i+[num] for i in f(n-1)]
4.题解
4.1python
class Solution:
def subsets(self, nums: List[int]) -> List[List[int]]:
# dfs1
n = len(nums)
visit = [0] * n
res = []
def dfs(idx, visit):
if idx == n:
temp = []
for i, j in enumerate(visit):
if j == 1:
temp.append(nums[i])
res.append(temp)
return
visit[idx] = 1
dfs(idx + 1, visit)
visit[idx] = 0
dfs(idx + 1, visit)
dfs(0, visit)
return res
# dfs2
n = len(nums)
res = []
def dfs(idx, temp):
res.append(temp)
for i in range(idx, n):
dfs(i + 1, temp + [nums[i]])
dfs(0, [])
return res
# 递推
res = [[], ]
for i in nums:
res += [[i] + ares for ares in res]
return res
5.知识点
1.python中,将一个数字与列表组合起来,需要将数字表示成列表形式。