70. Climbing Stairs
这道题其实是一个很典型的递归问题,递归函数都是和斐波那契问题相似的:
f
(
n
)
=
f
(
n
−
1
)
+
f
(
n
−
2
)
f(n) = f(n-1)+f(n-2)
f(n)=f(n−1)+f(n−2)
dp的想法主要是在递归的过程中复用已经遍历的状态 f ( n ) f(n) f(n),如果这个状态下的方法数已经确定,则不需要再继续往下遍历,直接返回保存的方法数即可。
class Solution(object):
def climbStairs(self, n):
"""
:type n: int
:rtype: int
"""
dp = [0] * 100000
dp[1] = 1
dp[2] = 2
dp[3] = 3
return self.climb(n, dp)
def climb(self, n, dp):
# 结束条件
if dp[n] > 0:
return dp[n]
# 循环体
dp[n] = self.climb(n-1, dp) + self.climb(n-2, dp)
print("n={},dp[n]={}".format(n, dp[n]))
return dp[n]
solution = Solution()
print(solution.climbStairs(3))