Python实现"爬楼梯"的方法

你需要攀爬一个有n个台阶的梯子

每一次你只能走1步或者两步,计算有多少中不同的登顶方式

注意:n必为正整数

Example 1:

Input: 2
Output: 2
Explanation: There are two ways to climb to the top.
1. 1 step + 1 step
2. 2 steps

Example 2:

Input: 3
Output: 3
Explanation: There are three ways to climb to the top.
1. 1 step + 1 step + 1 step
2. 1 step + 2 steps
3. 2 steps + 1 step

1:动态规划(参考:https://www.cnblogs.com/z941030/p/5615554.html;https://www.cnblogs.com/springfor/p/3886576.html

假设梯子有n层,那么如何爬到第n层呢,因为每次只能怕1或2步,那么爬到第n层的方法要么是从第n-1层一步上来的,要不就是从n-2层2步上来的,所以递推公式非常容易的就得出了:

dp[n] = dp[n-1] + dp[n-2]

def climbStairs(self, n):
        """
        :type n: int
        :rtype: int
        """
        if n<=2:
            return n
        temp_list = [0,1,2]
        for i in range(3,n+1):
            temp_list.append(temp_list[-1]+temp_list[-2])
        return temp_list[-1]

2:递归(错误:超出时间限制

def climbStairs(self, n):
        """
        :type n: int
        :rtype: int
        """
        sum = 0
        if n<=2:
            return n
        sum += self.climbStairs(n-1)
        sum += self.climbStairs(n-2)
        return sum

算法题来自:https://leetcode-cn.com/problems/climbing-stairs/description/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值