题目描述
AC代码
柠檬水售价5块钱,钱币面额只有5/10/20三种,其中如果需要找零的话实际上只需要5块钱或者10块钱,那么我们需要两个变量来存储这两种币值的个数。
其次找零的时候,我们要明确整钱优先,零钱其次的原则,比如有个人给了20块钱,第一想法应该是先找10然后找5块钱,而不是找3张5块的,为啥呢,十块钱的没了,我们可以用手中的五块钱来凑10块钱,但是5块钱的都找没了,手里只剩下10块钱的了,没法用10块钱来凑5块钱。
算法流程:
- 如果有个人拿着5块钱来了,那么 f i v e five five++
- 如果有个人拿着10块钱来了,意味着要找零,如果此时没有五块钱说明找零失败,如果有五块钱说明可以找零,那么 f i v e five five–同时 t e n ten ten++
- 如果是20块钱,首先先把10块的找出去,然后用五块钱凑剩下的,如果没有10块钱的那就都用5块钱来凑。如果这两种都凑不出来那么返回 f l a s e flase flase
class Solution {
public boolean lemonadeChange(int[] bills) {
int fives=0,tens=0;
for(int b:bills){
if(b==5) fives++;
else if(b==10){
if(fives!=0) fives--;
else return false;
tens++;
}else{
int t=15;
//先找10块
if(tens!=0){
tens--;
t-=10;
}
//找5块的零钱
while(t!=0&&fives!=0){
fives--;
t-=5;
}
//找零失败
if(t!=0) return false;
}
}
return true;
}
}