1. 程式人生 > >Leetcode PHP題解--D99 860. Lemonade Change

Leetcode PHP題解--D99 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;
    }
}

若覺得本文章對你有用,歡迎用