Python-回溯法(爬楼梯)

问题: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]
 

猜你喜欢

转载自blog.csdn.net/qq_41994006/article/details/82529237