1. 程式人生 > 實用技巧 >力扣習題:860. 檸檬水找零

力扣習題:860. 檸檬水找零

題目超連結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

`