leetcode第70题,简单题,如果按照题意就用递归求解没有问题,但是递归的话大数据过不了,这时候就需要找规律了,不难发现结果就是斐波那契数列,因此可以用非递归实现斐波那契,这样就可以提升速度了。
递归的主要思路是,当只有一个台阶的时候,只有一种走法,两个台阶的时候有两种走法,两个台阶以上的时候,走到最后一步无非就是两种情况,一种是还剩下一个台阶,另一种还剩下两个台阶,这样就从递归式中减去1或2,剩余的情况继续递归。
两种思路代码都贴上来吧。
递归法:
def climbStairs(n):
if n == 0:
return 1
if n == 1:
return 1
elif n == 2:
return 2
elif n > 2:
return climbStairs(n-1)+climbStairs(n-2)
非递归法:
class Solution(object):
def climbStairs(self, n):
"""
:type n: int
:rtype: int
"""
n += 2
before = 1
beforer = 1
for i in range(2,n):
tmp = beforer
beforer = before
before = tmp+beforer
return beforer