嗯,在成都的“中胜K书馆”刷leetcode,刚刚“编”完了晋升的PPT,心里还是挺虚的,还是刷两道题,开心开心吧
https://leetcode-cn.com/problems/climbing-stairs/description/
本质这道题,其实就是经典的“斐波纳切数列”
假设,n级台阶是有f(n)中走法
那么如果要跨到这第n级台阶的时候:
1、可以从n-1级跨,那么就有f(n-1)种走法
2、可以从n-2级跨,那么就有f(n-2)种走法
初时条件,1级和2级的走法数量是已知的,那么算法就很简单了
class Solution:
def climbStairs(self, n):
"""
:type n: int
:rtype: int
"""
if n == 1:
return 1
if n == 2:
return 2
if n > 2:
return self.climbStairs(n-1) + self.climbStairs(n-2)
呵呵,不过很不幸,这个算法会TLE,那么就得把递归变成迭代了,也不难,哈哈
class Solution:
def climbStairs(self, n):
"""
:type n: int
:rtype: int
"""
ret = [1,2]
for i in range(2,n+1):
ret.append(ret[i-1]+ret[i-2])
return ret[n]
Over!
网友评论