题目:
You are climbing a stair case. It takes n steps to reach to the top.
Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
思路:爬楼梯的问题,斐波那契数列,应该见过很多回了吧~~
不过直接递归会造成超时:
<span style="font-size:18px;"># class Solution:
# # @param n, an integer
# # @return an integer
# def climbStairs(self, n):
# if n == 1:
# return 1
# elif n ==2:
# return 2
# return self.climbStairs(n-1) +self.climbStairs(n-2)</span>
用列表优化下:
class Solution:
# @param n, an integer
# @return an integer
def climbStairs(self, n):
if n == 1:
return 1
elif n ==2:
return 2
res = []
res.append(1)
res.append(2)
for i in range(3,n+1,1):
res.append(res[i-3] + res[i-2])
return res[n-1]