1. 题目:
给定两个整数 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]]
2. 我的代码:
class Solution: def combine(self, n: int, k: int) -> List[List[int]]: # 记录结果 result = [] # 记录中间值 path = [] # 回溯主体 def backtracking(i_start): # 终止条件 if len(path) == k: result.append(path[:]) return # 递归 + 回溯 for i in range(i_start, n + 1): path.append(i) backtracking(i + 1) path.pop() # 最坏情况是这条分支没有达到条件的路径 return backtracking(1) return result
回溯算法有个大体框架,即:
path一维数组,记录各个路径,作为全局变量为了防止方程反复传参,所以在加给result时要记得传给他的是副本,不是本引用,因此是result.append(path[:])
result二维数组,记录各个情况。
backtracking(start_index)函数:
- 终止条件
- for里:前进 + 递归 + 回溯