""" File: climbing_stairs_backtrack.py Created Time: 2023-06-30 Author: krahets (krahets@163.com) """ def backtrack(choices: list[int], state: int, n: int, res: list[int]) -> int: """回溯""" # 当爬到第 n 阶时,方案数量加 1 if state == n: res[0] += 1 # 遍历所有选择 for choice in choices: # 剪枝:不允许越过第 n 阶 if state + choice > n: continue # 尝试:做出选择,更新状态 backtrack(choices, state + choice, n, res) # 回退 def climbing_stairs_backtrack(n: int) -> int: """爬楼梯:回溯""" choices = [1, 2] # 可选择向上爬 1 阶或 2 阶 state = 0 # 从第 0 阶开始爬 res = [0] # 使用 res[0] 记录方案数量 backtrack(choices, state, n, res) return res[0] """Driver Code""" if __name__ == "__main__": n = 9 res = climbing_stairs_backtrack(n) print(f"爬 {n} 阶楼梯共有 {res} 种方案")