原题
https://leetcode.cn/problems/subsets/description/
思路
回溯法
复杂度
时间:O(n!)
空间:O(n!)
Python代码
class Solution:
def subsets(self, nums: List[int]) -> List[List[int]]:
ans = []
def backtrack(k, start, path):
if len(path) == k:
ans.append(path.copy())
return
for i in range(start, len(nums)):
path.append(nums[i])
backtrack(k, i+1, path)
# 还原
path.pop()
for k in range(len(nums) + 1):
backtrack(k, 0, [])
return ans
Go代码
func subsets(nums []int) [][]int {
var ans [][]int
// 匿名函数
var backtrack func(int, int, []int)
backtrack = func(k int, start int, path []int) {
if len(path) == k {
com := make([]int, len(path))
copy(com, path)
ans = append(ans, com)
return
}
for i := start; i < len(nums); i++ {
path = append(path, nums[i])
backtrack(k, i+1, path)
// 还原
path = path[:len(path)-1]
}
}
for k := 0; k <= len(nums); k++ {
backtrack(k, 0, []int{})
}
return ans
}
343

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



