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

x33g5p2x  于2021-12-17 转载在 Java  
字(1.1k)|赞(0)|评价(0)|浏览(178)

前言

题目要求

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

解法一

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;
    }
}

解法三

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

代码

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

相关文章