题目地址:https://leetcode.com/problems/lemonade-change/description/
大意:大概的意思就是找钱的问题。少于10000之内的顾客数来排队买柠檬汽水,一瓶5块钱,但是顾客给的钱可能是5块,10块,或者20块,只能用顾客给的钱找钱。返回True
表示这些顾客的钱数能每个都找好。False
表示不能。
思路:很简单,用2个数据来表示收到的5块的钱和10块的钱,因为不可能用20去找钱,就不用管了。如果顾客给的10块的话,就得给他一个5块的,同时10块的个数+1,如果是20,就有2种情况,要么是给一个5块一个10块的,或者3个5块的,当然,前一种比较好,因为5块钱更灵活,还是留着最好。
class Solution:
def lemonadeChange(self, bills):
"""
:type bills: List[int]
:rtype: bool
"""
wallet = {5:0,10:0}
for bill in bills:
# 5
if bill == 5:
wallet[5] += 1
elif bill == 10:
if wallet[5] > 0:
wallet[10] += 1
wallet[5] -= 1
else:
return False
elif bill == 20:
if wallet[10] > 0 and wallet[5] > 0:
wallet[10] -= 1
wallet[5] -=1
elif wallet[5] >= 3:
wallet[5] -= 3
else:
return False
return True