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

来源:互联网 发布:nginx 限制ip访问次数 编辑:程序博客网 时间:2024/06/05 03:01

动态规划——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,比多次计算快很多。

原创粉丝点击