LeetCode 860. 柠檬水找零(C++ & python)

在柠檬水摊上,每一杯柠檬水的售价为 5 美元。

顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。

每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。

注意,一开始你手头没有任何零钱。

如果你能给每位顾客正确找零,返回 true ,否则返回 false 。

示例 1:

输入:[5,5,5,10,20]
输出:true
解释:
前 3 位顾客那里,我们按顺序收取 3 张 5 美元的钞票。
第 4 位顾客那里,我们收取一张 10 美元的钞票,并返还 5 美元。
第 5 位顾客那里,我们找还一张 10 美元的钞票和一张 5 美元的钞票。
由于所有客户都得到了正确的找零,所以我们输出 true。

示例 2:

输入:[5,5,10]
输出:true

示例 3:

输入:[10,10]
输出:false

示例 4:

输入:[5,5,10,10,20]
输出:false
解释:
前 2 位顾客那里,我们按顺序收取 2 张 5 美元的钞票。
对于接下来的 2 位顾客,我们收取一张 10 美元的钞票,然后返还 5 美元。
对于最后一位顾客,我们无法退回 15 美元,因为我们现在只有两张 10 美元的钞票。
由于不是每位顾客都得到了正确的找零,所以答案是 false。

思路:

分别用3个变量统计当前5美元,10美元,20美元的数量;

当新顾客付款5元时,继续下一个顾客;

当新顾客付款10元时,查看5元的数量是否大于0,若大于0,继续下一个,否则,返回false;

当新顾客付款20元时,首先查看10元的数量是否大于0,如果大于0,查看5元的数量是否大于0;如果10元的数量不大于0,查看5元的数量是否大于等于3。

代码如下:

C++

class Solution {
public:
    bool lemonadeChange(vector<int>& bills) 
    {
        int count5=0,count10=0,count20=0;
        int n = bills.size();
        int i;
        for(i=0;i<n;i++)
        {
            if(bills[i]==5)
            {
                count5++;
            }
            if(bills[i]==10)
            {
                count10++;
                if(count5>0)
                {
                    count5--;
                }
                else
                {
                    break;
                }
            }
            if(bills[i]==20)
            {
                count20++;
                if(count10>0)
                {
                    count10--;
                    if(count5>0)
                    {
                        count5--;
                    }
                    else
                    {
                        break;
                    }
                }
                else
                {
                    if(count5>=3)
                    {
                        count5 -= 3;
                    }
                    else
                    {
                        break;
                    }
                }
            }
            
        }
        if(i==n)
        {
            return true;
        }
        else
        {
            return false;
        }
        
        
    }
};

python

class Solution:
    def lemonadeChange(self, bills):
        """
        :type bills: List[int]
        :rtype: bool
        """
        count5=0
        count10=0
        count20=0
        n=len(bills)
        for i in range(0,n):
            if bills[i]==5:
                count5 += 1
                continue
            if bills[i]==10:
                count10 += 1
                if count5>0:
                    count5 -= 1
                else:
                    return False
            if bills[i]==20:
                count20 += 1
                if count10>0:
                    count10 -= 1
                    if count5>0:
                        count5 -= 1
                    else:
                        return False
                else:
                    if count5>=3:
                        count5 -= 3
                    else:
                        return False
        return True

猜你喜欢

转载自blog.csdn.net/qq_27060423/article/details/82469690