🥉Easy

注意边界条件

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

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

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

示例一

sample_1_1875.png

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

示例二
sample_2_1875.png

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

示例三

输入:numBottles = 5, numExchange = 5
输出:6

题解

这道题还是挺简单的,捋顺整个流程,写代码就好了:

JavaScript

一定要注意边界条件,刚刚漏写了等号,就错了

/**
 * @param {number} numBottles
 * @param {number} numExchange
 * @return {number}
 */
var numWaterBottles = function(numBottles, numExchange) {
    let sum = numBottles
    while (numBottles >= numExchange){
        let drink = Math.floor(numBottles / numExchange)
        sum+=drink
        numBottles = numBottles - drink*numExchange + drink
    }
    return sum

};

image.png

使用了递归

/**
 * @param {number} numBottles
 * @param {number} numExchange
 * @return {number}
 */

var numWaterBottles = function(numBottles, numExchange) {
  let all = numBottles
  let rest = numBottles // 剩下的空瓶子
  const generate = function (Bottles) {
    rest = Bottles % numExchange
    let temp = Math.floor(Bottles / numExchange)
    all += temp
    if (rest + temp >= numExchange) {
      generate(rest + temp)
    }
  }
  generate(rest)
  return all
};

Python

class Solution:
    def numWaterBottles(self, numBottles: int, numExchange: int) -> int:
        sum = numBottles
        while numBottles >= numExchange:
            drink = numBottles // numExchange
            sum+=drink
            numBottles = numBottles - drink * numExchange + drink
        return sum

image.png