问题:n阶楼梯,每次只能走一步或两步,输出所有方案
LeetCode有这道题不过是输出方案数,采用递归的方法,为了加深对回溯法了解,此处使用回溯法。
'''爬楼梯'''
n = 7 # 楼梯阶数
x = [] # 一个解(长度不固定,1-2数组,表示该步走的台阶数)
X = [] # 一组解
def climb_stairs(k): # 走第k步
global n, x, X
if sum(x) == n: # 已走的所有步数之和等于楼梯总台阶数
print(x)
else:
for i in [1, 2]: # 第k步这个元素的状态空间为[1,2]
x.append(i)
if sum(x)<=n: # 剪枝
# print(x)
climb_stairs(k+1)
x.pop() # 回溯
# 测试
climb_stairs(0) # 走第0步
输出结果:
[1, 1, 1, 1, 1, 1, 1]
[1, 1, 1, 1, 1, 2]
[1, 1, 1, 1, 2, 1]
[1, 1, 1, 2, 1, 1]
[1, 1, 1, 2, 2]
[1, 1, 2, 1, 1, 1]
[1, 1, 2, 1, 2]
[1, 1, 2, 2, 1]
[1, 2, 1, 1, 1, 1]
[1, 2, 1, 1, 2]
[1, 2, 1, 2, 1]
[1, 2, 2, 1, 1]
[1, 2, 2, 2]
[2, 1, 1, 1, 1, 1]
[2, 1, 1, 1, 2]
[2, 1, 1, 2, 1]
[2, 1, 2, 1, 1]
[2, 1, 2, 2]
[2, 2, 1, 1, 1]
[2, 2, 1, 2]
[2, 2, 2, 1]