原题
https://leetcode.cn/problems/combinations/description/
思路
回溯法
复杂度
时间:O(C(n, k))
空间:O(C(n, k))
Python代码
class Solution:
def combine(self, n: int, k: int) -> List[List[int]]:
ans = []
def dfs(start, path):
# 返回条件
if len(path) == k:
ans.append(path[:])
return
for i in range(start, n+1):
path.append(i)
dfs(i + 1, path)
# 还原
path.pop()
dfs(1, [])
return ans
Go代码
func combine(n int, k int) [][]int {
var ans [][]int
var dfs func(int, []int)
dfs = func(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 <= n; i++ {
path = append(path, i)
dfs(i+1, path)
// 还原
path = path[:len(path)-1]
}
}
dfs(1, []int{})
return ans
}

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



