题解 | #最小花费爬楼梯#

最小花费爬楼梯

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))

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务