前端 每日一道面试题(7)

力扣-柠檬水找零
在柠檬水摊上,每–杯柠檬水的售价为5美元
顾客排队购买你的产品,(按账 单bills支付的顺序)一次购买一一杯。
每位顾客只买一-杯柠檬水,然后向你付5美元、10美元或20美元。
你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付5美元。
注意,一开始你手 头没有任何零钱。
如果你能给每位顾客正确找零,返回true,否则返回false。
在这里插入图片描述

提示:
●0 <= bills. length <= 10000
●bills[i]不是5就是10或是20
解析
读题可知: - -开始我们手上是没有钱的,所以当第一位顾客支付10美元或者20美元的时候,都不能完成交易。由于最大面额是20美元,所以能用作找零的面额只有5美元和10美元。如果零钱不够无法找零,则交易失败。
下面开始组合条件:

function billsChange(bills) {
    // 目前手上可以用作找零的钱
    let $5=0,$10=0;
    // 第一位客户金额不足5美元时,交易失败
    if(bills[0]!==5) return false;
    for (const money of bills) {
        // 收到的是5美元的时候
        if(money==5){
            $5++;
            continue;
        } 
        // 收到的是10美元
        if(money==10){
             // 手里没有5美元的时候
            if ($5<=0) return false;
            // 手里有5美元的时候
            $5--;
            $10++;
            continue;
        }
        // 收到的是20美元的时候
        if($5>0 && $10>0){
            // 手里既有5美元  又有10美元的时候
            $5--;
            $10--;
            continue;
        }
        if($5>3){
             //手里有大于三张5美元的时候
            $5-=3;
            continue;
        }
        return false;
    }
    return true;
}
console.log(billsChange([5,5,10,20]))

今天的分享就到这了,如果有更好的想法,欢迎评论区指出,一起讨论哟!
喜欢记得 点赞~ 关注+收藏哟

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值