一、题目描述
在柠檬水摊上,每一杯柠檬水的售价为 5 美元。
顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。
每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。
注意,一开始你手头没有任何零钱。
如果你能给每位顾客正确找零,返回 true ,否则返回 false 。
二、解题思路
可以直接进行模拟,使用两个变量,一个记录5美元的张数,一个记录10美元的张数。
当碰到20块钱的时候,先找回10美金,再找回5美金(前提是有足够的美金),然后它们的张数减少:
这道题不是很难,主要是有很多判断:
- 当收到5美金的时候不用找零。
- 当收到10美金的时候,先判断手上是不是有5美金,有才能找零,没有的话只能返回false。
- 当收到20美金的时候,也要判断,这里有两种找零方式,一张10美金加两张5美金,或者三张5美金,都需要先进行判断。
三、代码演示
class Solution {
public boolean lemonadeChange(int[] bills) {
//使用两个变量记录10美元和5美元的张数
int five = 0;
int ten = 0;
//循环账单
for (int bill:bills){
if (bill == 5){
five++;
}else if (bill == 10){
//如果没有5美元,那么说明10美元找不开,返回false
if (five == 0){
return false;
}
//如果有5美元找零的话,5美元张数--,10美元张数++
five--;
ten++;
}else {
//如果是20块钱,那么就需要找零15元
if (ten>0 && five>0){
ten--;
five--;
}else if (five>=3){
five -= 3;
}else{
return false;
}
}
}
return true;
}
}