个人方法:
用change数组保存我们拥有的零钱的数量,change数组只有change[5]、change[10]、change[20]是有效的,其值代表了不同面值的零钱拥有多少张
顾客付了多少钱,先把钱存入零钱数组,然后计算需要找零的金额:
- 找零0元直接跳下一个循环
- 找零5元,查询change[5]的值是否>0,是就减1,否就返回false
- 找零15元,有两种情况,优先考虑10+5,不满足再考虑3张5元是否满足,都不满足则返回false
- for循环结束依然没返回false则代表找零成功,返回true
var lemonadeChange = function(bills) {
var count = [5,10,20]
var change=[]
for(const money of count){
change[money]=0
}
for(var i=0;i<bills.length;i++){
change[bills[i]]++
var money = bills[i]-5
if(money===0) continue
else if(money===5){
if(change[5]>=0){
change[5]--
}else{
return false
}
}else if(money===15){
if(change[10]>0 && change[5]>0){
change[10]--
change[5]--
}else if(change[5]>=3){
change[5]-=3
}else{
return false
}
}
}
return true
};
消耗时间和内存情况:
思路是没问题的,但是上面代码写的有点冗杂了,可以把步骤简化一下,简化的代码如下:
不管5元的零钱数量够不够,先假设够,当出现5元的张数小于0就说明无法满足
var lemonadeChange = function(bills) {
var change=[0,0]
for(var bill of bills){
if(bill===5) change[0]++
else if(bill === 10) {
change[0]--
change[1]++
}else if(bill===20 && change[1]>0){
change[0]--
change[1]--
}else{
change[0]-=3
}
if(change[0]<0) return false
}
return true
};