动态规划(dynamic programing)解决走楼梯问题

目录

问题描述:

输入描述:

输出描述:

代码:

代码解读:

问题描述:

走楼梯

现在有一截楼梯,根据你的腿长,你一次能走 1 级或 2 级楼梯,已知你要走 n 级楼梯才能走到你的目的楼层,请实现一个方法,计算你走到目的楼层的方案数。

输入描述:

输入整数n。(1<=n<=50)

输出描述:

输出方案数

代码:

class Solution:
    def __init__(self) -> None:
        pass

    def climbStairs(self, n):
        if n <= 1:
            return 1

        dp = [0] * (n + 1)
        dp[1] = 1
        dp[2] = 2

        for i in range(3, n + 1):
            dp[i] = dp[i - 1] + dp[i - 2]

        return dp[n]

if __name__ == "__main__":
    n = int(input().strip())

    sol = Solution()
    result = sol.climbStairs(n)

    print(result)

代码解读:

    def climbStairs(self, n):
        # 0阶或者1阶对应一种方案
        if n <= 1:
            return 1
        # 初始化dp长度为n+1, 给定初始值:dp[1]=1,dp[2]=2
        dp = [0] * (n + 1)
        dp[1] = 1    # 目的地1阶对应1种方案
        dp[2] = 2    # 目的地2阶对应2种方案(1阶走两次或者2阶走1次)
        for i in range(3, n + 1):
            ''' 状态转移方程:目的地方案数等于
            前一阶的方案数加上前两阶的方案数(对应题目中一次仅能走1阶或2阶)'''
            dp[i] = dp[i - 1] + dp[i - 2]    
        return dp[n]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值