LeetCode 860. Lemonade Change【Java】

题目描述

860. 柠檬水找零

AC代码

​ ​ ​ ​ ​ ​ 柠檬水售价5块钱,钱币面额只有5/10/20三种,其中如果需要找零的话实际上只需要5块钱或者10块钱,那么我们需要两个变量来存储这两种币值的个数。

​ ​ ​ ​ ​ ​ 其次找零的时候,我们要明确整钱优先,零钱其次的原则,比如有个人给了20块钱,第一想法应该是先找10然后找5块钱,而不是找3张5块的,为啥呢,十块钱的没了,我们可以用手中的五块钱来凑10块钱,但是5块钱的都找没了,手里只剩下10块钱的了,没法用10块钱来凑5块钱。

算法流程:

  • 如果有个人拿着5块钱来了,那么 f i v e five five++
  • 如果有个人拿着10块钱来了,意味着要找零,如果此时没有五块钱说明找零失败,如果有五块钱说明可以找零,那么 f i v e five five–同时 t e n ten ten++
  • 如果是20块钱,首先先把10块的找出去,然后用五块钱凑剩下的,如果没有10块钱的那就都用5块钱来凑。如果这两种都凑不出来那么返回 f l a s e flase flase
class Solution {
    public boolean lemonadeChange(int[] bills) {
        int fives=0,tens=0;
        for(int b:bills){
            if(b==5) fives++;
            else if(b==10){
                if(fives!=0) fives--;
                else return false;
                tens++;
            }else{
                int t=15;
                //先找10块
                if(tens!=0){
                    tens--;
                    t-=10;
                }
                //找5块的零钱
                while(t!=0&&fives!=0){
                    fives--;
                    t-=5;
                }
                //找零失败
                if(t!=0) return false;
            }
        }
        return true;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值