美文网首页
LeetCode 860. 柠檬水找零

LeetCode 860. 柠檬水找零

作者: 草莓桃子酪酪 | 来源:发表于2022-07-10 04:12 被阅读0次
题目

在柠檬水摊上,每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。注意,一开始你手头没有任何零钱。给你一个整数数组 bills ,其中 bills[i] 是第 i 位顾客付的账。如果你能给每位顾客正确找零,返回 true ,否则返回 false 。

例:
输入:bills = [5,5,5,10,20]
输出:true
解释:
前 3 位顾客那里,我们按顺序收取 3 张 5 美元的钞票。
第 4 位顾客那里,我们收取一张 10 美元的钞票,并返还 5 美元。
第 5 位顾客那里,我们找还一张 10 美元的钞票和一张 5 美元的钞票。
由于所有客户都得到了正确的找零,所以我们输出 true。

方法

顾客付款共存在三种情况:五美元,十美元,二十美元

  • 若顾客支付五美元,则不需要进行找零,五美元所拥有的数量加一
  • 若顾客支付十美元,则需要进行找零,返还给顾客五美元
  • 若顾客支付二十美元,则需要进行找零,返还给顾客十美元和五美元的组合,或三张五美元。因为十美元只能用于二十美元的找零,而五美元可以用于十美元和二十美元的找零,那么在收到二十美元时,应先返还十美元
class Solution(object):
    def lemonadeChange(self, bills):
        num = [0] * 3
        for i in range(len(bills)):
            if bills[i] == 5:
                num[0] += 1
            elif bills[i] == 10:
                num[1] += 1
                if num[0] > 0:
                    num[0] -= 1
                else:
                    return False
            else:
                num[2] += 1
                if num[1] > 0 and num[0] > 0:
                    num[1] -= 1
                    num[0] -= 1
                elif num[0] > 2:
                    num[0] -= 3
                else:
                    return False
        return True

优化:因二十美元不能用来找零,那么该纸币的数量可以不用进行记录

相关文章

网友评论

      本文标题:LeetCode 860. 柠檬水找零

      本文链接:https://www.haomeiwen.com/subject/rdlkvrtx.html