有n级台阶,每次可以向上跳1至2级,上台阶的总花费为sum(cost[i]), i为所有踩过的台阶。可以从索引为0的步骤开始,或者从索引为1的步骤开始求最小花费。
因为每次可以走1层或者2层,并且可以从0或者从1开始,所以可以得到dp[0]为0,dp[1]为0。从2开始,dp[i]可以由通过dp[i-2]走2层或者通过dp[i-1]走一层到达,而这i-2和i-1层所要花费的值分别为cost[i-2]和cost[i-1],,dp[i] = min(dp[i-2] + cost[i-2], dp[i-1] + cost[i-1])
class Solution(object):
def minCostClimbingStairs(self, cost):
"""
:type cost: List[int]
:rtype: int
"""
dp0 = dp1 = dp2 = 0
for i in range(2,len(cost)+1):
dp2 = min(dp0 + cost[i-2],dp1 + cost[i-1])
dp0 = dp1
dp1 = dp2
return dp2
简化为用三个变量表示,每前进一次,将dp0变成dp1,dp2变成dp1迭代。