力扣習題:860. 檸檬水找零
阿新 • • 發佈:2020-07-30
題目超連結https://leetcode-cn.com/problems/lemonade-change/
解題思路:
1.已知關係當前餘額=balance+5,(即每次只能交易一筆,即+5元)
2.已知change=0,則無需找零。
3.已知交易前的餘額小於change,則不能找零。
4.上面3點容易得出。但餘額面值與change零錢的匹配關係是否滿足,則是難點。
故如何該演算法的關係點:計算change與餘額面值的匹配關係。
根據題目已知bills[i] 不是 5 就是 10 或是 20 ,即表明,找零change只有三個值即5,10,15
如果要滿足這三個值的找零,則餘額面值裡面需有對應的面值,否則無法找零
通過上面的分析,找到了change與餘額面值的匹配關係,但如何保證餘額面值balance_list當前狀態正確呢?
即更新餘額面值balance_list的場景
1.如果無需找零,即change=0時,直接append(5)
2.如果需要找零,則remove元素,則append新的面值
`class Solution:
def lemonadeChange(self, bills) -> bool:
#設餘額的初始值為0 balance=0 balance_list=[] for id,item in enumerate(bills): #當前找零=實際收款-5 change=item-5 #交易前的餘額小於change,則不能找零。 if balance<change: return False # 當前餘額=balance+5 balance=balance+5 #change=0,則無需找零。 if change==0: #無需找零,即change=0時,直接append(5) balance_list.append(item) continue #change與餘額面值的匹配關係 elif change==5: if 5 not in balance_list: return False else: #需要找零,則remove元素,則append新的面值 balance_list.remove(5) balance_list.append(item) continue elif change==10: if 10 in balance_list: balance_list.remove(10) balance_list.append(item) continue elif balance_list.count(5)>=2: balance_list.remove(5) balance_list.remove(5) balance_list.append(item) continue else: return False elif change==15: if balance_list.count(5)>=3: balance_list.remove(5) balance_list.remove(5) balance_list.remove(5) balance_list.append(item) continue elif 10 in balance_list and 5 in balance_list: balance_list.remove(10) balance_list.remove(5) balance_list.append(item) continue else: return False return True
`