美文网首页
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