分析:每次可以爬1or2阶楼梯,当需要爬到n阶楼梯时,意味着可以从n-1阶和n-2阶爬上去,所以需要求出到n-1阶和n-2阶的数(有递推关系妥妥的动态规划,接下来就是找递推式,然后自底向上计算),递推式为:k[n] = k[n-1]+k[n-2](和斐波那契简直不要太像好吧。。。)
代码参考斐波那契
class Solution:
def climbStairs(self, n: int) -> int:
if(n == 1):
return 1
elif(n == 2):
return 2
else:
a = 1
b = 2
for i in range(2,n):
if(b>a):
a = a+b
elif(a>b):
b = a+b
if(a>b):
return a
else:
return b
看别人的还学到另一种方法:
class Solution:
def climbStairs(self, n: int) -> int:
if(n == 1):
return 1
elif(n == 2):
return 2
else:
a = 1
b = 2
for i in range(2,n):
temp = a
a = b
b = temp+a
return b
也是用指针形式,只是使用temp先把a的当前位置值存好,然后a、b依次往后挪。
执行通过: