柠檬水找零
一、LeetCode题解
瞧一瞧~
- 博健的LeetCode题解:Gitbook版本传送门
- 博健的LeetCode题解:CSDN传送门
- 有趣的CSS:Gitbook传送门
- 前端进阶笔记:Gitbook传送门
做题路线( ** = 当前阶段)
- 阶段一(解题总数,单题题解数至上)**
- 阶段二(解题质量至上)
- 阶段三(算法思想至上)
二、算法题
在柠檬水摊上,每一杯柠檬水的售价为 5 美元。
顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。
每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。
注意,一开始你手头没有任何零钱。
如果你能给每位顾客正确找零,返回 true ,否则返回 false 。
示例
输入:[5,5,5,10,20]
输出:true
解释:
- 前 3 位顾客那里,我们按顺序收取 3 张 5 美元的钞票。
- 第 4 位顾客那里,我们收取一张 10 美元的钞票,并返还 5 美元。
- 第 5 位顾客那里,我们找还一张 10 美元的钞票和一张 5 美元的钞票。
- 由于所有客户都得到了正确的找零,所以我们输出 true。
解法一(循环)
- 建立简易字典
- 面额从大到小匹配
var lemonadeChange = function (bills) {
const dollors = {5: 0, 10: 0, 20: 0};
if(bills[0] !== 5) return false;
for (let bill of bills) {
console.log(bill);
dollors[bill] += 1;
if (bill === 10) dollors[5] -= 1;
else if (bill === 20) {
if (dollors[10] > 0) {
dollors[5] -= 1;
dollors[10] -= 1;
} else dollors[5] -= 3;
}
if (dollors[5] < 0) return false;
}
return true
};