题解 | #最小花费爬楼梯#
最小花费爬楼梯
http://www.nowcoder.com/practice/9b969a3ec20149e3b870b256ad40844e
每步返回的答案,和进入下个迭代的更新值,略有不同。
#! /usr/bin/python
def climb(n: int, costs: list) -> int:
if n == 1:
return costs[0]
if n == 2:
return min(costs)
min_i = 0
c0 = costs[0] # 表示实际踩到某一台阶的最小cost
c1 = costs[1] # 表示实际踩到某一台阶的最小cost
# 对最后一个n,可以不踩。
# 要看的是到达n-1多少cost,或者n-2下标的+n的总和cost哪个小; 两种可能,c0 + costs[i] 或者 c1
for i in range(2, n):
min_i = min(c0 + costs[i], c1) # 踩到第i阶一定要花costs[i]
c0, c1 = c1, min(c0 + costs[i], c1 + costs[i]) # 这里下一步的c0, c1变成了当前的c1和n,应该要加上这一步
# print(f'{i}, {min_i}, {c0}, {c1}')
return min_i
if __name__ == '__main__':
n = int(input())
costs = [ int(x) for x in input().split(' ')]
print(climb(n, costs))