每日一题——LeetCode860

每日一题——LeetCode860_第1张图片

个人方法:

用change数组保存我们拥有的零钱的数量,change数组只有change[5]、change[10]、change[20]是有效的,其值代表了不同面值的零钱拥有多少张

顾客付了多少钱,先把钱存入零钱数组,然后计算需要找零的金额:

  • 找零0元直接跳下一个循环
  • 找零5元,查询change[5]的值是否>0,是就减1,否就返回false
  • 找零15元,有两种情况,优先考虑10+5,不满足再考虑3张5元是否满足,都不满足则返回false
  • for循环结束依然没返回false则代表找零成功,返回true
var lemonadeChange = function(bills) {
    var count = [5,10,20]
    var change=[]
    for(const money of count){
        change[money]=0
    }

    for(var i=0;i=0){
                change[5]--
            }else{
                return false
            }
        }else if(money===15){
            if(change[10]>0 && change[5]>0){
                change[10]--
                change[5]--
            }else if(change[5]>=3){
                change[5]-=3
            }else{
                return false
            }
        }
    }
    return true
};

消耗时间和内存情况:

每日一题——LeetCode860_第2张图片

思路是没问题的,但是上面代码写的有点冗杂了,可以把步骤简化一下,简化的代码如下:

不管5元的零钱数量够不够,先假设够,当出现5元的张数小于0就说明无法满足

var lemonadeChange = function(bills) {
    var change=[0,0]
    for(var bill of bills){
        if(bill===5) change[0]++
        else if(bill === 10) {
            change[0]--
            change[1]++
        }else if(bill===20 && change[1]>0){
            change[0]--
            change[1]--
        }else{
            change[0]-=3
        }
        if(change[0]<0) return false
    }
    return true
};

你可能感兴趣的:(每日一题,javascript,算法)