At a lemonade stand, each lemonade costs $5.
Customers are standing in a queue to buy from you, and order one at a time (in the order specified by bills).
Each customer will only buy one lemonade and pay with either a $5, $10, or $20 bill. You must provide the correct change to each customer, so that the net transaction is that the customer pays $5.
Note that you don’t have any change in hand at first.
Return true if and only if you can provide every customer with correct change.
Example 1:
Input: [5,5,5,10,20]
Output: true
Explanation:
From the first 3 customers, we collect three $5 bills in order.
From the fourth customer, we collect a $10 bill and give back a $5.
From the fifth customer, we give a $10 bill and a $5 bill.
Since all customers got correct change, we output true.
Example 2:
Input: [5,5,10]
Output: true
Example 3:
Input: [10,10]
Output: false
Example 4:
Input: [5,5,10,10,20]
Output: false
Explanation:
From the first two customers in order, we collect two $5 bills.
For the next two customers in order, we collect a $10 bill and give back a $5 bill.
For the last customer, we can’t give change of $15 back because we only have two $10 bills.
Since not every customer received correct change, the answer is false.
我的解法:用贪心,注意在20块钱找零的时候优先使用1张10块和1张5块找零。
class Solution {
public boolean lemonadeChange(int[] bills) {
int five=0;
int ten=0;
for(int i=0;i<bills.length;i++){
if(bills[i]==5){
five++;
}else if(bills[i]==10){
if(five<=0)
return false;
else{
five--;
ten++;
}
}else{
if(five>=1&&ten>=1){
five--;
ten--;
}else if(five>=3){
five-=3;
}else{
return false;
}
}
}
return true;
}
}
另一种递归解法:
class Solution {
public boolean lemonadeChange(int[] bills) {
return helper(bills,0,0,0);
}
public boolean helper(int[] bills,int index,int five,int ten){
if(index==bills.length)
return true;
if(bills[index]==5){
return helper(bills,index+1,five+1,ten);
}else if(bills[index]==10){
return five>0 && helper(bills,index+1,five-1,ten+1);
}else{
if(ten>0&&five>0)
return helper(bills,index+1,five-1,ten-1);
else if(five>=3)
return helper(bills,index+1,five-3,ten);
else
return false;
}
}
}