题目链接
题目描述
给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。
示例 1:
输入: n = 4, k = 2
输出:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
示例 2:输入: n = 1, k = 1
输出: [[1]]
提示:
1 <= n <= 20
1 <= k <= n
解题思路
回溯法,维护一个全局栈,从1开始压栈,压入后判断栈内元素是否到达k个,到达则把栈内元素整体复制到ans中,作为答案的一种,栈满后开始pop,然后再压入下一个元素,再次回溯
代码
Python
class Solution:
def combine(self, n: int, k: int) -> list[list[int]]:
def backTrack(level: int) -> None:
if len(cur_ans) == k:
ans.append(cur_ans[:]) #这里是防止添加元素后元素又被修改导致ans里的数据被更改
elif level > n:
return
else:
cur_ans.append(level)
backTrack(level+1)
cur_ans.pop()
backTrack(level+1)
ans, cur_ans = [], []
backTrack(1)
return ans