个人方法:
用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]-5if(money===0) continueelse 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
};