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