动态规划——Climbing Stairs(easy,python)

动态规划——Climbing Stairs(easy,python)

题目

n级台阶,一次跨1级台阶或者2级台阶,问最终能到有几种到达台阶顶的方案。

解析

当n<=0,0种方案,不需要走
当n = 1,1种方案,走一步上去
当n = 2,2种方案,一步一步 or 一下子两步

而对于第n级来说,假设n-1级,n-2级分别有 num[n-1],num[n-2], 则 n-1级到n级只能跨一级台阶,而n-2级到n级为了不重复,只能跨2级台阶,所以对于n级来说,有num[n-1]+num[n-2]种方案。

class Solution(object):
    def climbStairs(self, n):
        """
        :type n: int
        :rtype: int
        """
        if n <= 0:
            return 0
        if n == 1:
            return 1
        if n == 2:
            return 2

        former_one_step = 2
        former_two_step = 1
        all_ways = 0

        for i in range(2, n):
            all_ways = former_one_step + former_two_step
            former_two_step = former_one_step
            former_one_step = all_ways

        return all_ways

在LeetCode上看到的25ms的范例:

class Solution(object):
    def climbStairs(self, n):
        """
        :type n: int
        :rtype: int
        """
        if n == 1:
            return 1
        if n == 2:
            return 2
        list = [1,2]
        for i in range(2, n):
            list.append(list[i-2]+list[i-1])
        return list[-1]

可以尝试用list做初始,在list后直接append,比多次计算快很多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值