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

247 阅读1分钟

力扣-柠檬水找零

在柠檬水摊上,每--杯柠檬水的售价为5美元

顾客排队购买你的产品,(按账 单bills支付的顺序)一次购买一一杯。

每位顾客只买一-杯柠檬水,然后向你付5美元、10美元或20美元。

你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付5美元。

注意,一开始你手 头没有任何零钱。

如果你能给每位顾客正确找零,返回true,否则返回false。

image.png

提示:

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

今天的分享就到这了,如果有更好的想法,欢迎评论区指出,一起讨论哟!

喜欢记得 点赞~ 关注+收藏哟!