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

解法一
思路:贪心,如果每次需要找钱,需要每次都找面值尽可能大的,因为5块可以凑成10块,但是10块没法拆成俩5块的。
题解:
class Solution:
def lemonadeChange(self, bills: List[int]) -> bool:
# 开始口袋空空
money = {5:0, 10:0, 20:0}
for give in bills:
if give == 5: # 5块不着钱
money[5] += 1
elif give == 10: # 10块找5块
money[10] += 1
if money[5] > 0:
money[5] -= 1
else:
return False
elif give == 20: # 20块先找10+5,不行再找5+5+5
money[20] += 1
if money[10] > 0 and money[5] > 0:
money[10] -= 1
money[5] -= 1
elif money[5] >= 3:
money[5] -= 3
else:
return False
return True