原题链接:leetcode-cn.com/problems/le…
解题思路:
- 首先梳理一下题意:
- 零钱只有5元和10元两种。
- 该题只关心是否足够找零,因此收入时只需要考虑收入的零钱数量即可,至于赚了多少钱无需考虑。
- 每次收入都对应3种可能情况,以此模拟找零过程:
- 收入5元,此时5元零钱数量加1。
- 收入10元,此时10元零钱数量加1,5元零钱数量减1。
- 收入20元,由于5元零钱更加通用,因此若有10元零钱,则找零10元和5元。若没有10元零钱,则找零3张5元。
- 每次完成找零后,查看零钱数量是否为负,若是则表示零钱不够找零,返回false。
- 如果能正常退出循环,表示零钱数量都>=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;
};
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!