2022-10-24【我的刷题日记】860 柠檬水找零

思路:这题虽然思路很简单,但是也有易错的地方,我一开始的做法是仅使用一个变量来保存收到的金额,如果手上的金额大于找零的金额即为true。实际上这是不正确的,本题的金额只有5 10 20 那么我们进行找零的时候也只能用5 10 20(实际上20用不到 因为最多只需要找零15)也就是说当我们手上有两张10 对方付给我们20的时候虽然金额总数更大 但是我们是没法找零钱的。
所以我们需要把收到的金额分类记录,分别记录5和10的数量,然后再遍历的时候对于收到的三种零钱进行判断即可 之后的思路就很一目了然了

class Solution {
    public boolean lemonadeChange(int[] bills) {
//        分别记录5和10的数量
        int five = 0;
        int ten = 0;
        for (int i = 0; i < bills.length ; i++) {
//            对于接收到的三种钱进行分别处理
            if (bills[i] == 5){
                five++;
            }else if (bills[i] == 10){
                if (five <= 0){
                    return false;
                }
                five--;
                ten++;
            }else {
//                收到20的时候有两种找法 优先使用十块钱的进行找回 因为5块钱适用的情况更多 需要尽可能留在手中
                if (ten > 0&& five >0){
                    ten--;
                    five--;
                } else if (five >= 3){
                    five -= 3;
                }else {
                    return false;
                }
            }
        }
        return true;
    }
}

你可能感兴趣的:(2022-10-24【我的刷题日记】860 柠檬水找零)