假设有一个柠檬水摊,每个柠檬水花费$5。现在,顾客正排着队从商店购买,然后一次订购。
每个客户只能购买一个柠檬水,并用5美元,10美元或20美元的账单付款。我们必须为每个客户提供正确的零钱,以便使交易净额是客户支付5美元。首先,我们手头没有任何变化。
我们必须检查是否可以为每个客户提供正确的更改。
因此,如果输入像[5,5,5,10,20],那么输出将为True,从前三个客户开始,我们可以依次获得三张5美元的钞票。从第四张开始,我们收集了一张10美元的钞票,还了5美元。之后,从第五个客户那儿,我们给了10美元的钞票和5美元的钞票。当所有客户得到正确的更改时,我们输出true。
为了解决这个问题,我们将遵循以下步骤-
n5:= 0,n10:= 0,n20:= 0
对于账单中的每个i,
返回False
n5:= n5-1
n5:= n5 -3
返回False
n10:= n10-1
n5:= n5-1
返回False
n10:= n10 +1
n5:= n5 + 1
如果我与5相同
否则当我等于10时
否则n20:= n20 +1
如果票据的大小> 0并且n5等于0,则
如果我等于20并且n10> 0和n5> 0,则
否则,当i等于20且n10等于0且n5 <3时,则
否则,当i等于20且n10等于0且n5> = 3时,则
如果我等于10并且n5> 0,则
否则,当我等于10且n5等于0时,则
返回True
让我们看下面的实现以更好地理解-
class Solution: def lemonadeChange(self, bills): n5 = 0 n10 = 0 n20 = 0 for i in bills: if i == 5: n5 += 1 elif i == 10: n10 += 1 else: n20 += 1 if len(bills) > 0 and n5 == 0: return(False) if i == 20 and n10 > 0 and n5 > 0: n10 -= 1 n5 -= 1 elif i == 20 and n10 == 0 and n5 < 3: return(False) elif i == 20 and n10 == 0 and n5 >= 3: n5 = n5 -3 if i == 10 and n5 > 0: n5 -= 1 elif i == 10 and n5 == 0: return (False) return(True) ob = Solution() print(ob.lemonadeChange([5,5,5,10,20]))
[5,5,5,10,20]
输出结果
True