LeetCode 30 ~ ? 水题(并非)

25 – 09 – 30 (补于 25 – 10 – 06)

今日份题面

超市正在促销,你可以用 numExchange 个空水瓶从超市兑换一瓶水。最开始,你一共购入了 numBottles 瓶水。

如果喝掉了水瓶中的水,那么水瓶就会变成空的。

给你两个整数 numBottles 和 numExchange ,返回你 最多 可以喝到多少瓶水。

我能借一个吗(

模拟就行

class Solution {
    public int numWaterBottles(int numBottles, int numExchange) {
        int res = 0;
        while(numBottles >= numExchange){
            res += numBottles / numExchange * numExchange;
            numBottles = numBottles / numExchange + numBottles % numExchange;
        }
        res += numBottles;
        return res;
    }
}

或者组合数学推导一下

class Solution {
    public int numWaterBottles(int numBottles, int numExchange) {
        return numBottles + (numBottles - 1) / (numExchange - 1);
    }
}


25 – 10 – 01 (补于 25 – 10 – 07)

今日份题面

给你两个整数 numBottles 和 numExchange 。

numBottles 代表你最初拥有的满水瓶数量。在一次操作中,你可以执行以下操作之一:

  • 喝掉任意数量的满水瓶,使它们变成空水瓶。
  • 用 numExchange 个空水瓶交换一个满水瓶。然后,将 numExchange 的值增加 1 。

注意,你不能使用相同的 numExchange 值交换多批空水瓶。例如,如果 numBottles == 3 并且 numExchange == 1 ,则不能用 3 个空水瓶交换成 3 个满水瓶。

返回你 最多 可以喝到多少瓶水。

其实和昨天的差不多,模拟就行,注意每次换水后要求数 +1

class Solution {
    public int maxBottlesDrunk(int numBottles, int numExchange) {
        int res = numBottles;
        while(numBottles >= numExchange){
            numBottles -= numExchange;
            ++res;
            ++numBottles;
            ++numExchange;
        }
        return res;
    }
}

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注