吴师兄学算法day08 贪心 860. 柠檬水找零
题目:860. 柠檬水找零
易错点:
- 我写的是if esle 哈哈,第一次还写错了。i ==20的时候,5元只找了1张。哈哈哈.应该找3张
我的代码:
class Solution:
def lemonadeChange(self, bills: List[int]) -> bool:
dic = {5:0,10:0,20:0}
for i in bills:
if i== 5:
dic[5] +=1 # 收入5元1张
continue
if i == 10:
if dic[5]>= 1: # 余额里有5元就继续
dic[10] = dic[10] + 1 # 增加收入
dic[5] = dic[5] - 1 # 找零
else:
return False
if i == 20:
if dic[10]>=1 and dic[5]>=1: # 找10元和5元的各一张
dic[10] = dic[10] - 1 # 找零10元1张
dic[5] = dic[5] -1 # 找零5元1张
dic[20] = dic[20] + 1 # 进账20元1张
continue
# 实在没招了,找5元的
if dic[5] >=3: # 如果有3张5元的,可以找开零钱
dic[20] = dic[20] + 1
dic[5] = dic[5] - 3 # 减去3张5元
continue
else: # 如果不满足,直接就结束了
return False
# 能走到这里,说明都能找开零钱
return True
老师的代码:
# 登录 AlgoMooc 官网获取更多算法图解
# https:#www.algomooc.com
# 作者:程序员吴师兄
# 代码有看不懂的地方一定要私聊咨询吴师兄呀
# 柠檬水找零( LeetCode 860 ):https:#leetcode-cn.com/problems/lemonade-change/
class Solution:
def lemonadeChange(self, bills: List[int]) -> bool:
# 用来记录 5 元钞票的数量
five = 0
# 用来记录 10 元钞票的数量
ten = 0
# 顾客开始按顺序购买,并找零
for i in range(len(bills)) :
# 1、如果发现是 5 元面额
if bills[i] == 5 :
# 那么可以直接收钱,不需要找零
# 并且 5 元钞票的数量加 1
five += 1
# 2、如果发现是 10 元面额
elif bills[i] == 10 :
# 如果手中有 5 元钞票,则找零 5 元
if five > 0 :
# 5 元钞票的数量减 1
five -= 1
# 10 元钞票的数量加 1
ten += 1
else :
# 如果手中没有 5 元钞票,说明找零失败
return False
# 3、如果发现是 20 元面额
else :
# 如果手中有 10 元 和 5 元钞票,则找零 1 张 10 元和 1 张 5 元的钞票
if ten > 0 and five > 0 :
# 5 元钞票的数量减 1
five -= 1
# 10 元钞票的数量减 1
ten -= 1
else:
# 如果手中只有 5 元的,并且数量超过或者等于 3 张
# 那么找零 3 张 5 元的钞票
if five >= 3 :
# 5 元钞票的数量减 3
five -= 3
else :
# 说明这个时候顾客付 20 元的时候
# 1、手中没有 1 张 10 元的和 1 张 5 元的
# 2、手中没有 3 张 5 元的
# 说明找零失败
return False
# 所有顾客都找零了,成功
return True
扩展写法:
总结:
- 老师跟我写的差不多。。。哈哈
参考:
https://r07na4yqwor.feishu.cn/docx/FW37dJAfgo49iXxZnmccPmDinWc