LeetCode – 1518 – 换酒问题 – java – 细节喔~


在这里插入图片描述

前言

虽然这个题很简单,但是有趣它的解题思维的多样性,我觉得还是很必要写一写的。


题目要求

在这里插入图片描述

简单来说:就是我们买了 numBottles 瓶 冰阔乐(以前的那种玻璃瓶装的,现在一些小餐馆还有),店家告诉我们店里现在有活动,numExchange 个 空瓶子,可以换一瓶 冰阔乐,那我们肯定狂饮啊,几个人现场直播吹阔乐。 问最后,我们一共吹了多少瓶?我们又不是傻,我们去数嘛!嘻嘻。


由于题目很简单,我们直接上程序,我们主要目的是它的解题思维

解法一

class Solution {
    public int numWaterBottles(int numBottles, int numExchange) {
        int drink = numBottles;// 记录喝了多少阔乐,刚开始买的可乐肯定拿来喝的,拿满的换,那不是zz???
        int isEmpty = numBottles;// 目前手上的空瓶,在我们眼里,这是不是一箱可乐,是一箱空瓶子!!
        while(isEmpty>=numExchange){// 当空瓶子不满足换酒条件时,跳出循环
            drink +=  isEmpty / numExchange;// 计算 手上的空瓶 可以换多少瓶阔乐,换到就是喝啊!肯定是不会让它活到明天滴!
            
            isEmpty =  isEmpty / numExchange + isEmpty%numExchange;
            // 空瓶换回来的阔乐,肯定是要喝完的!喝完了不就是空瓶了嘛! 再加上 手上还完,还 剩余 的 瓶子
            // 就是 第一轮下来,手上剩余的瓶子,年轻人喝阔乐还信怂的?不存在滴!
            // 拿着目前手上的瓶子,再继续换,继续吹!
        }
        // 此时 我们手上的瓶子,已经不足以换一瓶了,可乐party就此结束!
        return drink;
    }
}

在这里插入图片描述


解法二

class Solution {
    public int numWaterBottles(int numBottles, int numExchange) {
        int drink = numBottles;
        int isEmpty = numBottles;
        while(isEmpty>=numExchange){
            isEmpty -= numExchange;// 给老板 numExchange 个空瓶,我手上就少 numExchange 个空瓶子
            drink ++;// 给了老板瓶子,老板肯定是要给 阔乐,对不对?那么意味着又有一瓶阔乐要死我的嘴下!
            isEmpty++;// 它挂了。。  我手上原本不富裕的战利品又多了一个。。。
        }
        return drink;
    }
}

在这里插入图片描述


解法三

此解法是建立于 解法二的基础上,假设 每个2个空瓶子 就可以 换一瓶阔乐。也就是说我们手上少了2个空瓶子,多一瓶未开封的阔乐,但是这瓶阔乐喝完了,也就是一个空瓶子,也就是 我手上 又多了一个空瓶!也就是说 我们其实就给了老板一个空瓶子。也就是说 numExchange -1 个瓶子就能得到一瓶阔乐。
解法三就是按照这中思维去解决大的!(如果此时我向老板借一个瓶子,我能不能无限卡bug。。。。)

解法三是运用了递归思想,其实更为严格来说:是运用数学的方面的知识

在这里插入图片描述


代码

class Solution {
    public int numWaterBottles(int numBottles, int numExchange) {
        return numBottles >= numExchange ? (numBottles -numExchange)/(numExchange-1)+1+numBottles: numBottles;
        // 冒号的返回 numBottles 是因为你钱少了,不对,是买少了。。。
    }
}

在这里插入图片描述

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>