zl程序教程

您现在的位置是:首页 >  其它

当前栏目

​力扣解法汇总1518-换酒问题

汇总 力扣 解法 问题
2023-09-11 14:18:53 时间

原题链接:力扣


描述:

小区便利店正在促销,用 numExchange 个空酒瓶可以兑换一瓶新酒。你购入了 numBottles 瓶酒。

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

请你计算 最多 能喝到多少瓶酒。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/water-bottles
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

示例 1:

输入:numBottles = 9, numExchange = 3
输出:13
解释:你可以用 3 个空酒瓶兑换 1 瓶酒。
所以最多能喝到 9 + 3 + 1 = 13 瓶酒。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/water-bottles
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

递归的思路,每次传入当前酒数量,空瓶数量,以及对换值。返回对应的酒的数量。递归截止条件就是当前酒数量+空瓶小于对换值。

代码:

 public int numWaterBottles(int numBottles, int numExchange) {
        return numWaterBottles(numBottles, 0, numExchange);
    }

    public int numWaterBottles(int numBottles, int emptyBottles, int numExchange) {
        if ((numBottles + emptyBottles) < numExchange) {
            return numBottles;
        }
        int nextNumBottles = (numBottles + emptyBottles) / numExchange;
        emptyBottles = (numBottles + emptyBottles) % numExchange;
        int i = numWaterBottles(nextNumBottles, emptyBottles, numExchange);
        return numBottles + i;
    }