python Solution LeetCode No.70 climbing-stairs(爬楼梯)

题目:

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

注意:给定 n 是一个正整数。

示例 1:

输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。
1.  1 阶 + 1 阶
2.  2 阶

示例 2:

输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。
1.  1 阶 + 1 阶 + 1 阶
2.  1 阶 + 2 阶
3.  2 阶 + 1 阶

代码1:

class Solution:
    def climbStairs(self, n):
        if n < 3:
            return n
        onestep = 1
        twostep = 2
        finalstep = 0
        for i in range(n-2):
            finalstep = onestep + twostep
            onestep = twostep
            twostep = finalstep
        return finalstep

结果1:

代码2:

class Solution:
    def climbStairs(self, n):
        if n < 3:
            return n
        climbstairs = [0]*n
        climbstairs[0] = 1
        climbstairs[1] = 2
        for i in range(2, n, 1):
            climbstairs[i] = climbstairs[i-1] + climbstairs[i-2]
        return climbstairs[n-1]

结果2:

代码3:

class Solution:
    def climbStairs(self, n):
        if n > 1:
            return self.climbStairs(n-1)+self.climbStairs(n-2)
        else:
            return 1

 结果3:

如果使用递归求解,会超时,因为期间进行了大量的重复计算。

 

说明:

代码1和代码2的原理差不多,都是使用递推求解,该题其实是斐波那契数列的变形,每上一节台阶的总方法数都是,前两阶台阶的方法数的总和,所以递推公式为f(n) = f(n-1) + f(n-2)一直算下去,例如到达第一阶的方法总和为1,到达第二的方法总和为2,所以到达第三阶的时候f(3)=f(2)+f(1)=3,而第四阶时f(4)=f(3)+f(2)=5,......直到到达顶阶n,f(n)中的值即为解。代码1和2的区别在于代码2初始化了一个列表用于模拟台阶数,而代码1只用三个变量保存了最近三阶的值,然后滚动算下去,在内存上更加节省。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值