77 组合
给定两个整数 n
和 k
,返回范围 [1, n]
中所有可能的 k
个数的组合。
你可以按 任何顺序 返回答案。
输入:n = 4, k = 2
输出:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
输入:n = 1, k = 1
输出:[[1]]
重点是回溯的思路模板,if中的条件终止 ,for中的结果收集。剪枝主要体现在startIndex的范围操作。
class Solution:
def combine(self, n: int, k: int) -> List[List[int]]:
# 未剪枝
# res = []
# path = []
# def backtrack(n, k, startIndex):
# if len(path) == k:
# res.append(path[:])
# return
# for i in range(startIndex, n+1):
# path.append(i)
# backtrack(n, k, i+1)
# path.pop()
# backtrack(n, k, 1)
# return res
# 剪枝
res = []
path = []
def backtrack(n, k, startIndex):
if len(path) == k:
res.append(path[:])
return
for i in range(startIndex, n-(k-len(path))+2):
path.append(i)
backtrack(n, k, i+1)
path.pop()
backtrack(n, k, 1)
return res