Leetcode PHP题解--D99 860. Lemonade Change

D99 860. Lemonade Change

题目链接

860. Lemonade Change

题目分析

这道题目是典型的收银问题了。

假设你在开店第一天没有零钱,你的商品卖5元。纸币有5元、10元、20元三种。给定一个数组代表你今天遇到的客人在买东西时给的钱。判断你的钱箱能不能顺利给每一位客人找零。(假设每一位客人都只买一件商品)

思路

首先判断客户给的是哪种。

如果是5元的话,直接放入钱箱,不需要判断钱箱内的钱。
如果是10元,则需判断钱箱内是否有多于1张5元。没有则直接中断交易,返回false。否则,把10元放入钱箱,并拿走一张5元。
如果是20元,则优先判断是否有多于1张5元和1张10元。若没有,判断有没有多于3张5元。符合的话和前面做同样的操作,把客户的钱放入钱箱,并找零。

最终代码

<?php
class Solution {

    /**
     * @param Integer[] $bills
     * @return Boolean
     */
    function lemonadeChange($bills) {
        $inHand = [0,0,0];
        foreach($bills as $bill){
            switch($bill){
                case 5:
                    $inHand[0] += 1;
                    break;
                case 10:
                    $inHand[1] += 1;
                    if($inHand[0]>=1){
                        $inHand[0] -= 1;
                    }
                    else{
                        return false;
                    }
                    break;
                case 20:
                    $inHand[2] +=1;
                    //10 + 5 
                    if($inHand[0]>=1 && $inHand[1]>=1){
                        $inHand[0] -= 1;
                        $inHand[1] -= 1;
                    }
                    // 5 * 3
                    else if($inHand[0]>=3){
                        $inHand[0] -= 3;
                    }
                    else{
                        return false;
                    }

                    break;
            }
        }
        return true;
    }
}

若觉得本文章对你有用,欢迎用爱发电资助。

skys215 has written 109 articles

没有bug的代码是有bug的代码。

积分:5392 等级:P8 职业:PHP工程师 城市:深圳

0 条回复

登录后才能进行评论,立即登录?