題目鏈接:https://oj.leetcode.com/problems/climbing-stairs/
心得:很簡單的題目,其實就是斐波拉切數列,值得注意的是,如果f(n)=f(n-1)+f(n-2)的方式來遞歸的話,結果會超時。
可以用類似於動態規劃的思路來解題,即從f(1)開始算到f(2),從而避免了遞歸過程中的重複計算。
AC代碼:
# --*-- coding:utf-8 --*--
class Solution:
# @param n, an integer
# @return an integer
def climbStairs2(self, n): #遞歸
if n == 0 or n == 1:
return 1
return self.climbStairs(n-1) + self.climbStairs(n-2)
def climbStairs(self, n): #動態規劃
list = [1, 1]
for i in range(n-1):
list.append(list[i] + list[i+1])
return list[n]
s = Solution()
print s.climbStairs(5)