LeetCode简单题之柠檬水找零
題目
在檸檬水攤上,每一杯檸檬水的售價為 5 美元。顧客排隊購買你的產品,(按賬單 bills 支付的順序)一次購買一杯。
每位顧客只買一杯檸檬水,然后向你付 5 美元、10 美元或 20 美元。你必須給每個顧客正確找零,也就是說凈交易是每位顧客向你支付 5 美元。
注意,一開始你手頭沒有任何零錢。
給你一個整數數組 bills ,其中 bills[i] 是第 i 位顧客付的賬。如果你能給每位顧客正確找零,返回 true ,否則返回 false 。
示例 1:
輸入:bills = [5,5,5,10,20]
輸出:true
解釋:
前 3 位顧客那里,我們按順序收取 3 張 5 美元的鈔票。
第 4 位顧客那里,我們收取一張 10 美元的鈔票,并返還 5 美元。
第 5 位顧客那里,我們找還一張 10 美元的鈔票和一張 5 美元的鈔票。
由于所有客戶都得到了正確的找零,所以我們輸出 true。
示例 2:
輸入:bills = [5,5,10,10,20]
輸出:false
解釋:
前 2 位顧客那里,我們按順序收取 2 張 5 美元的鈔票。
對于接下來的 2 位顧客,我們收取一張 10 美元的鈔票,然后返還 5 美元。
對于最后一位顧客,我們無法退回 15 美元,因為我們現在只有兩張 10 美元的鈔票。
由于不是每位顧客都得到了正確的找零,所以答案是 false。
示例 3:
輸入:bills = [5,5,10]
輸出:true
示例 4:
輸入:bills = [10,10]
輸出:false
提示:
1 <= bills.length <= 10^5
bills[i] 不是 5 就是 10 或是 20
來源:力扣(LeetCode)
解題思路
??這道題需要一個記賬的數據結構,很顯然字典就是這種非常合適的對象。采用字典:用key表示錢的面值,用value表示錢的數量。找零時按照先找大頭再找小錢進行。
class Solution:def lemonadeChange(self, bills: List[int]) -> bool:if bills[0]!=5: #如果第一個顧客給的錢不是5元那么就不能找零return Falsed={5:0,10:0,20:0} #賬本for i in bills:if i==5:d[5]+=1elif i==10: #10元只能找5元if d[5]>0:d[5]-=1d[10]+=1else:return Falseelse: #20元能找一個10元和一個5元,如果10元沒有那么就找3個5元if d[10]>0 and d[5]>0:d[10]-=1d[5]-=1d[20]+=1elif d[5]>2:d[5]-=3d[20]+=1else:return Falsereturn True
總結
以上是生活随笔為你收集整理的LeetCode简单题之柠檬水找零的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode简单题之查找共用字符
- 下一篇: LeetCode简单题之拼写单词