【LeetCode】每日一题2021/11/09

【LeetCode】每日一题2021/11/09
【LeetCode】每日一题2021/11/09

  • 思路
    总体思想就是从前往后算,比较收到的钱是否大于要找零的钱;然后要找零尽量先找大面额,再找小面额,应为大面额用得少应该尽量要把它用出去,面额5就要尽量留着,应为它是万能的。
    那么对于编码,有三种面额的钱,我们需要把它们的数目存下来,然后看是否满足找零的条件。
class Solution {
    public boolean lemonadeChange(int[] bills) {
        // 因为20的面额不能找零,所以不记录
        int count_5 = 0, count_10 = 0;
        for (int i = 0; i < bills.length; i++) {
            if (bills[i] == 5) {
                count_5++;
            }
            if (bills[i] == 10) {
                if (count_5 <= 0) {
                    return false;
                }
                count_10++;
                count_5--;
            }
            if (bills[i] == 20) {
                if (count_10 > 0 && count_5 > 0) {
                    count_10--;
                    count_5--;
                } else if (count_5 >= 3){ // 若没有10元
                    count_5 -= 3;
                } else {
                    return false;
                }
            }
        }
        return true;
    }
}

这道题是分了几种情况,但是写出来的代码有的会很复杂,有的会很简洁,这就和分情况有关了,比如可以将10和5面额写在一起判断,也可以先判断10再在内部判断5,但是这样就会感觉写得很复杂。
【LeetCode】每日一题2021/11/09

上一篇:数据结构第六次实验报告


下一篇:力扣860、柠檬水找零