LeetCode/860. 柠檬水找零
860. 柠檬水找零
在柠檬水摊上,每一杯柠檬水的售价为 5 美元。
顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。
每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。
注意,一开始你手头没有任何零钱。
如果你能给每位顾客正确找零,返回 true ,否则返回 false 。
示例 1:
1 | 输入:[5,5,5,10,20] |
示例 2:
1 | 输入:[5,5,10] |
示例 3:
1 | 输入:[10,10] |
示例 4:
1 | 输入:[5,5,10,10,20] |
提示:
1 | 0 <= bills.length <= 10000 |
来源:力扣(LeetCode)
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题解:
本题看似简单,其实还是有很多的细节。由于只有三种面值的货币,所以我们创建两个变量five和ten,分别表示五美元钞票张数和十美元钞票张数,考虑如果第一次收到的就是大于五美元的钞票,由于没有找零的钞票,所以直接返回false。每当我们遇到十美元钞票时候,需要让十美元张数加一,同时因为需要找回五美元,所以五美元张数减一。遇到二十美元的时候,有两种找零方式,第一种是三张五美元,第二种是一张五美元,一张十美元。优先选择第二种方案,因为五美元钞票不光要找二十美元的还要找十美元的,用处较多。当没有一张十美元和一张五美元钞票时,才退而求其次,找零三张五美元钞票,这里注意,如果此时五美元钞票不足三张,直接返回false,因为此时已经无法对二十美元找零;如果遍历完整个数组,都满足条件,直接在方法最后返回true。
具体代码如下:
1 | class Solution { |

