860. 柠檬水找零
class Solution {public boolean lemonadeChange(int[] bills) {int five = 0;int ten = 0;for(int bill : bills) {if(bill == 5) {// 直接接收 5 美元的钞票five++;} else if(bill == 10) {// 收到 10 美元的钞票,需要找回 5 美元的零钱if(five == 0) return false;five--;ten++;} else {// 收到 20 美元的钞票,需要找回 15 美元的零钱// 优先使用 10 美元和 5 美元的零钱,然后尝试使用三张 5 美元的零钱if(ten > 0 && five > 0) {ten--;five--;} else if(five >= 3) {five -= 3;} else {return false;}}}return true;}
}
通过模拟整个交易过程来解决这个问题。在这个过程中,需要跟踪你手头有多少 5 美元和 10 美元的钞票。每当有人支付 5 美元时,可以直接接受付款。当有人支付 10 美元时,需要有一张 5 美元的钞票来找零。当有人支付 20 美元时,需要有一张 10 美元和一张 5 美元的钞票或者三张 5 美元的钞票来找零。如果在任何时候不能找零,那么返回 false
。否则,可以通过整个过程,返回 true
。