动态规划的思路
1.确定dp的含义,包括下标
2.确定递推的公式,即状态转移方程
3.初始化,即边界情况
4.确定遍历顺序
5.举例推导
509. 斐波那契数
题目描述: 509. 斐波那契数.
解法
dp
class Solution(object):
def fib(self, n):
if n < 2:
return n
dp = [0] * (n+1)
dp[0] = 0
dp[1] = 1
for i in range(2,n+1):
dp[i] = dp[i-1] + dp[i-2]
return dp[n]
70. 爬楼梯
题目描述: 70. 爬楼梯.
解法
dp
class Solution(object):
def climbStairs(self, n):
if n < 3:
return n
dp = [0]*(n+1)
dp[1] = 1
dp[2] = 2
for i in range(3,n+1):
dp[i] = dp[i-1] + dp[i-2]
return dp[n]
一定要注意边界情况满不满足,另外就是从dp[i-1]到dp[i]是一种方法,从dp[i-2]到dp[i]也是一种方法,所以dp[i]的方法就是两个的和。
746. 使用最小花费爬楼梯
题目描述: 746. 使用最小花费爬楼梯.
解法
dp
class Solution(object):
def minCostClimbingStairs(self, cost):
n = len(cost)
dp = [0] * (n+1)
for i in range(2,n+1):
dp[i] = min((dp[i-1]+cost[i-1]),(dp[i-2] + cost[i-2]))
return dp[n]
dp表示第n层的最小花费,那如果cost有n个,说明已知0到n-1层往上走的开销,那么楼顶是第n层,dp数组长度就是n+1.接下来就是常规的状态转移。