LeetCode - 860

题目链接:https://leetcode.com/problems/lemonade-change/description/

题意:有一队人按顺序来买水,有可能支付5,10或者20元,一瓶水5元,如果无法找钱,return false。注意一开始你一分钱都没有。

根据题意,可以分为以下几种情况:
①第一个人不是支付5元,那么直接return false。
②支付10元,至少需要一张5元
③支付20元,优先考虑一张10元,一张5元的情况,再考虑三张5元情况。

我是开了一个数组,记录5,10,20元的数量。

class Solution {
public:
    bool lemonadeChange(vector<int>& bills) {
        int flag[3] = {0,0,0}; //flag[0],flag[1],flag[2]分别代表5,10,20的数量
        if(bills.size() == 0) return true;
        if(bills.size() != 0 && bills[0] != 5) return false;
        for(int i = 0;i < bills.size();i++){
            if(bills[i] == 5){
                flag[0]++;
            }else if(bills[i] == 10){
                if(flag[0] > 0){
                    flag[0]--;
                    flag[1]++;
                }else{
                    return false;
                }
            }else{
                if(flag[1] > 0 && flag[0] > 0){
                    flag[1]--;
                    flag[0]--;
                    flag[2]++;
                }else if(flag[1] <= 0 && flag[0] >= 3){
                    flag[0] -= 3;
                }else{
                    return false;
                }
            }
        }
        return true;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值