描述
At a lemonade stand, each lemonade costs $5.
Customers are standing in a queue to buy from you, and order one at a time (in the order specified by bills).
Each customer will only buy one lemonade and pay with either a 10, or 5.
Note that you don't have any change in hand at first.
Return true if and only if you can provide every customer with correct change.
Example 1:
Input: [5,5,5,10,20]
Output: true
Explanation:
From the first 3 customers, we collect three $5 bills in order.
From the fourth customer, we collect a $10 bill and give back a $5.
From the fifth customer, we give a $10 bill and a $5 bill.
Since all customers got correct change, we output true.
Example 2:
Input: [5,5,10]
Output: true
Example 3:
Input: [10,10]
Output: false
Example 4:
Input: [5,5,10,10,20]
Output: false
Explanation:
From the first two customers in order, we collect two $5 bills.
For the next two customers in order, we collect a $10 bill and give back a $5 bill.
For the last customer, we can't give change of $15 back because we only have two $10 bills.
Since not every customer received correct change, the answer is false.
Note:
0 <= bills.length <= 10000
bills[i] will be either 5, 10, or 20
解析
根据题意,就是按照 bills 中的顺序进行换零钱,每个人只支付 5 块,你如果手里现有的钱可以找零则继续进行下一位,如果不能找零直接返回 False 。思路很简单,就是用字典 collect 来对 5 、10 、20 这三种货币进行计数,如果出现 5 ,则直接对 collect[5] 加一,如果出现 10 ,则判断 collect[5] 是否大于零,这表示可以给 10 块找零,如果出现 20 ,则判断是否 collect[5] 大于零且 collect[10] 大于零,或者 collect[5] 大于等于 3 ,表示可以给 20 找零,如果出现不可以找零情况直接返回 False ,否则最后返回 True 。
解答
class Solution(object):
def lemonadeChange(self, bills):
"""
:type bills: List[int]
:rtype: bool
"""
if len(bills) == 0:
return True
if bills[0] != 5:
return False
collect = {5: 1, 10: 0, 20: 0}
for bill in bills[1:]:
if bill == 5:
collect[5] += 1
elif bill == 10:
if collect[5] > 0:
collect[5] -= 1
collect[10] += 1
else:
return False
elif bill == 20:
if collect[10] > 0 and collect[5] > 0:
collect[10] -= 1
collect[5] -= 1
collect[20] += 1
continue
elif collect[5] >= 3:
collect[5] -= 3
collect[20] += 1
continue
else:
return False
return True
运行结果
Runtime: 116 ms, faster than 50.63% of Python online submissions for Lemonade Change.
Memory Usage: 13.5 MB, less than 85.00% of Python online submissions for Lemonade Change.
原题链接:leetcode.com/problems/le…
您的支持是我最大的动力