使用最小花费爬楼梯 ^.^ 2022/08/05

2022-08-14  本文已影响0人  佛说子曰道道

参见 https://leetcode.cn/problems/min-cost-climbing-stairs
这道题的基础应该是:走到最顶层,每次可以走一步或者两步,一共有多少种走法?
再基础一点应该是:斐波那契数列。
是的,就是:a(n)=a(n-1)+a(n-2)。
那么此外还需要做的就是记录一下花费,达到最小。所以变成了这样a(n)=Math.min(a(n-1),a(n-2))。但是这样可以么?这样直接就把a(n)覆盖了啊,还怎么往下走?
所以走到了n,可以加上a(n),代表继续往下走。
等到n>a.length,就是走到了尽头。

返回值

但是,返回值是哪个?
这里我们可以想象有个虚拟的台阶,比如明面上只有99个,那么可以虚拟出第100个,这个才是真正的终点,而不是走到99就完成了。还记得我们在上面加上了a(n)嘛?是的,a(100)=Matn.min(a(99),a(98))。这就是最终的答案。

    public int minCostClimbingStairs(int[] cost) {
        for (int i = 2; i < cost.length; i++) {
            cost[i] = Math.min(cost[i - 1], cost[i - 2]) + cost[i];
        }
//        再手动添加一个虚拟的台阶,也就是最后一阶
        return Math.min(cost[cost.length - 1], cost[cost.length - 2]);
    }
上一篇下一篇

猜你喜欢

热点阅读