LeetCode 题解:860. 柠檬水找零,模拟情境,JavaScript,详细注释

用户头像
Lee Chen
关注
发布于: 2020 年 11 月 28 日
LeetCode题解:860. 柠檬水找零,模拟情境,JavaScript,详细注释

原题链接:https://leetcode-cn.com/problems/lemonade-change/



解题思路:



  1. 首先梳理一下题意:

* 零钱只有5元和10元两种。

* 该题只关心是否足够找零,因此收入时只需要考虑收入的零钱数量即可,至于赚了多少钱无需考虑。

  1. 每次收入都对应3种可能情况,以此模拟找零过程:

* 收入5元,此时5元零钱数量加1。

* 收入10元,此时10元零钱数量加1,5元零钱数量减1。

* 收入20元,由于5元零钱更加通用,因此若有10元零钱,则找零10元和5元。若没有10元零钱,则找零3张5元。

  1. 每次完成找零后,查看零钱数量是否为负,若是则表示零钱不够找零,返回false。

  2. 如果能正常退出循环,表示零钱数量都>=0,则返回true。



/**
* @param {number[]} bills
* @return {boolean}
*/
var lemonadeChange = function (bills) {
let five = 0; // 统计5元零钱数量
let ten = 0; // 统计10元零钱数量
// 遍历bills,模拟收钱过程
for (const bill of bills) {
if (bill === 5) {
// 如果收到5元钱,只需要收钱,无需找零,5元钱的数量加1
five++;
} else if (bill === 10) {
// 如果收到10元,10元钱数量加1
// 同时需要找零5元,5元钱数量减1
ten++;
five--;
} else if (bill === 20) {
// 如果收到20元,则需要找零15元,分为两种情况处理
if (ten) {
// 如果有10元零钱,则优先使用10元钱,10元钱数量减1
ten--;
// 找零10元后,还需要找零5元,5元钱数量减1
five--;
} else {
// 如果没有10元零钱,则都使用5元找零,5元零钱减3
five -= 3;
}
}
// 如果经过找零后,零钱数量为负,表示零钱不足,无法找零
if (five < 0 || ten < 0) {
return false;
}
}
// 如果能正常退出循环,表示零钱没有为负,零钱足够找零
return true;
};



发布于: 2020 年 11 月 28 日阅读数: 22
用户头像

Lee Chen

关注

还未添加个人签名 2018.08.29 加入

还未添加个人简介

评论

发布
暂无评论
LeetCode题解:860. 柠檬水找零,模拟情境,JavaScript,详细注释