leetcode860题. 柠檬水找零

这个题第一眼想到的肯定是遍历bills,然后先把客户的钱收到手里,然后找零。本来我想的是如果需要找零,用贪心的想法,比如客户给你100,可以找一个50,两个20,一个5块。但是题目又说了,只有5,10,20三种情况,那就不需要这么复杂了,多写几个if和else就可以列出所有情况了
用lst存储手里的钱,索引0,1,2代表5,10,20元。遍历bills,判断i是几,然后让对应的钱数+1。
然后如果是5元,那就不用找零,就不需要管,如果是10元,就需要找5元,但是找之前需要判断手里是否有5元,如果有就让索引0减1,没用就直接返回一个False
然后如果是20元,就有两种情况,找一个10元,一个5元,或者三个5元。所以先判断是否有10元,有10元再判断是否有5元。有5元就可以给客户找零了,对应的索引减去1,如果有10元,但是没有5元,就直接返回False,这里如果没有5元,自然也不可能找3个5元了。
然后如果手里没有10元,就判断是否有3个及以上的5元,有的话就可以找零,没有的话就返回一个False
class Solution:def lemonadeChange(self, bills: List[int]) -> bool:lst=[0,0,0]for i in bills:if i==5:lst[0]+=1elif i==10:lst[1]+=1else:lst[2]+=1if i==10:if lst[0]>0:lst[0]-=1else:return Falseif i==20:if lst[1]>0:if lst[0]>0:lst[1]-=1lst[0]-=1else:return Falseelif lst[0]>2:lst[0]-=3else:return Falsereturn True
