力扣上的原题,用java写的代码

力扣上的原题,用java写的代码

问题描述:

力扣上原题:860. 柠檬水找零
通过测试用例:
57 / 59
输入:
[5,5,10,10,20]
输出:
true
预期结果:
false

public class Solution {
    public boolean lemonadeChange(int[] bills) {
        if(bills[0] == 10 || bills[0] == 20){
            return false;
        }
        int flag5 = 0;
        int flag10 = 0;
        for (int i=0;i<bills.length;i++){
            if(bills[i] == 5){
                flag5++;
            }
            if (bills[i] == 10 && flag5 !=0){
                flag5--;
                flag10++;
                continue;
            }
            if (bills[i] == 10 && flag5 ==0){
                return false;
            }
            if (bills[i] == 20 ){
                if(flag10 != 0){
                    if(flag5 !=0) {
                        flag10--;
                        flag5--;
                    }
                }
                else {
                    if (flag5 >= 3){
                        flag5 = flag5-3;
                    }
                    else return false;
                }
            }
        }
        return  true;
    }
}

我调试到

img

if为true,应该执行了语句

if (bills[i] == 10 && flag5 !=0){
                flag5--;
                flag10++;
                continue;

但是却直接跳过执行下一条了,为什么?

img

这个语句应该是false的,因为此时i=1, 但不知道后面为什么显示true;

if (bills[i] == 10 && flag5 !=0){
                flag5--;
                flag10++;
                continue;

用例之所以错失因为


if (bills[i] == 20 ){
                if(flag10 != 0){
                    if(flag5 !=0) {
                        flag10--;
                        flag5--;
                    }
                }

中 flag5 为0需返回false,即

if (bills[i] == 20 ){
                if(flag10 != 0){
                    if(flag5 !=0) {
                        flag10--;
                        flag5--;
                    }
                    else return false;
                }

你那个bills[i]下面那里显示不是等于5吗?不等于10肯定不进去啊