第一天:《LeetCode一天一例》-----爬楼梯问题(python实现)

爬楼梯问题

       题目:小明同学爬n阶楼梯,他一次可以上一阶,也可上两阶。问小明上楼的方式有多少种?

       解: 假设楼梯有一个台阶,则只有一种方法。 假设楼梯有两个台阶,则有两种(一次走一阶,走两次。或者一次走两阶,走一次。)。 假设楼梯有三阶呢?     你先想一下:从哪里都可以直接走到三阶? 显然是在第一个台阶处,一下子走两阶直到三阶。或者是在第二阶,一下子走一阶,就到三阶了。。  。。 以此类推: n阶的时候有多少种方法?  那显然就是F(n-1) 加上F(n-2)。  注: F(n)表示走到n阶有多少种方法。

          由此,我们用动态规划的思想, 可以写出下面的式子:

                       

代码实现(分别采用了递归和迭代)

def dp_solver(n):
    # 迭代解法

    temp = [0] * n    # 建立一个长度为n的列表

    if n == 1:
        temp[0] = 1
        return temp
    elif n == 2:
        temp[0] = 1
        temp[1] = 2
        return temp
    else:
        temp[0] = 1
        temp[1] = 2
        for i in range(2, n):
            temp[i] = temp[i-1] + temp[i-2]   # 这里主要考虑到列表是从编号为0出开始存值
        return temp

def recursion(n):
    # 递归解法
    if n == 1:
        return 1
    if n == 2:
        return 2
    return recursion(n-1) + recursion(n-2)

if __name__ == '__main__':

    # 假设当前台阶我们设置为50层,问有多少种方法
    n = 10

    solve = dp_solver(n)
    print("爬各个层的方法:", solve)  # 打印爬各个层的方法
    print("当台阶数为:{}, 总共有{}种爬法!!!".format(n, solve[n-1]))

    solve2 = recursion(n)
    print("当台阶数为:{}, 总共有{}种爬法!!!".format(n, solve2))

结果输出:
 

                             

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

传道解惑也

打赏一下咯

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值