題目超連結
解題思路:
1.已知關係當前餘額=balance+5,(即每次只能交易一筆,即+5元)
2.已知change=0,則無需找零。
3.已知交易前的餘額小於change,則不能找零。
4.上面3點容易得出。但餘額面值與change零錢的匹配關係是否滿足,則是難點。
故如何該演算法的關係點:計算change與餘額面值的匹配關係。
根據題目已知bills[i] 不是 5 就是 10 或是 20 ,即表明,找零change只有三個值即5,10,15
如果要滿足這三個值的找零,則餘額面值裡面需有對應的面值,否則無法找零
#設餘額的初始值為0
balance=0
balance_list=
for id,item in enumerate(bills):
#當前找零=實際收款-5
change=item-5
#交易前的餘額小於change,則不能找零。
if balance=2:
balance_list.remove(5)
balance_list.remove(5)
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)
continue
elif 10 in balance_list and 5 in balance_list:
balance_list.remove(10)
balance_list.remove(5)
continue
else:
return false
return true
優化版本: 解題思路 由於找零【5,10,15】,故實質轉換為:記錄5,10的個數,如果有乙個透支了,即說明不能滿足找零
def lemonadechange(bills):
#i記錄5出現的次數
#j記錄10出現的次數
#一開始餘額為0,則5和10的面值都沒有
i=j=0
for k in bills:
if k5:i+=1;#無需要找零
elif k10:j+=1;i-=1 #如需找5元,則i-1
else: #k20
if j1:i-=3 #找零15,則一次10,再取一次1
elif j==0:i-=1 #找零15,則取3次5
#如果i和j出現負數,則代表不能取
if i<0 or j<0:
return false
return true
`我覺得**有點缺陷,如果是20塊錢,我們應該優先考慮找零一張10塊的 和一張5塊的,而不是先找3張5塊的】 因為5塊的比10塊錢要更加靈活,如果你全把5塊換光了,就不好找後面的零錢了
力扣 860 檸檬水找零
在檸檬水攤上,每一杯檸檬水的售價為 5 美元。顧客排隊購買你的產品,按賬單 bills 支付的順序 一次購買一杯。每位顧客只買一杯檸檬水,然後向你付 5 美元 10 美元或 20 美元。你必須給每個顧客正確找零,也就是說淨交易是每位顧客向你支付 5 美元。注意,一開始你手頭沒有任何零錢。如果你能給每...
檸檬水找零 860
在檸檬水攤上,每一杯檸檬水的售價為 5 美元。顧客排隊購買你的產品,按賬單 bills 支付的順序 一次購買一杯。每位顧客只買一杯檸檬水,然後向你付 5 美元 10 美元或 20 美元。你必須給每個顧客正確找零,也就是說淨交易是每位顧客向你支付 5 美元。注意,一開始你手頭沒有任何零錢。如果你能給每...
860 檸檬水找零
在檸檬水攤上,每一杯檸檬水的售價為 5 美元。顧客排隊購買你的產品,按賬單 bills 支付的順序 一次購買一杯。每位顧客只買一杯檸檬水,然後向你付 5 美元 10 美元或 20 美元。你必須給每個顧客正確找零,也就是說淨交易是每位顧客向你支付 5 美元。注意,一開始你手頭沒有任何零錢。如果你能給每...