超市正在促销,你可以用 numExchange
个空水瓶从超市兑换一瓶水。最开始,你一共购入了 numBottles
瓶水。
如果喝掉了水瓶中的水,那么水瓶就会变成空的。
给你两个整数 numBottles
和 numExchange
,返回你 最多 可以喝到多少瓶水。
示例 1:
输入:numBottles = 9, numExchange = 3
输出:13
解释:你可以用 3
个空瓶兑换 1 瓶水。
所以最多能喝到 9 + 3 + 1 = 13 瓶水。
示例 2:
输入:numBottles = 15, numExchange = 4
输出:19
解释:你可以用 4
个空瓶兑换 1 瓶水。
所以最多能喝到 15 + 3 + 1 = 19 瓶水。
提示:
1 <= numBottles <= 100
2 <= numExchange <= 100
方法一:模拟
我们可以直接模拟整个过程。
初始时,我们有 numBottles
瓶水,因此可以喝到 ans = numBottles
瓶水,然后得到 numBottles
个空瓶子。
接下来,如果我们有 numExchange
个空瓶子,那么我们可以用它们兑换一瓶水并喝掉,此时我们剩余的空瓶子数量为 numBottles - numExchange + 1
,然后我们累加喝到的水的数量,即
最后,返回 ans
即可。
时间复杂度
class Solution:
def numWaterBottles(self, numBottles: int, numExchange: int) -> int:
ans = numBottles
while numBottles >= numExchange:
numBottles -= numExchange - 1
ans += 1
return ans
class Solution {
public int numWaterBottles(int numBottles, int numExchange) {
int ans = numBottles;
while (numBottles >= numExchange) {
numBottles -= (numExchange - 1);
++ans;
}
return ans;
}
}
class Solution {
public:
int numWaterBottles(int numBottles, int numExchange) {
int ans = numBottles;
while (numBottles >= numExchange) {
numBottles -= (numExchange - 1);
++ans;
}
return ans;
}
};
func numWaterBottles(numBottles int, numExchange int) int {
ans := numBottles
for numBottles >= numExchange {
numBottles -= (numExchange - 1)
ans++
}
return ans
}
class Solution {
/**
* @param Integer $numBottles
* @param Integer $numExchange
* @return Integer
*/
function numWaterBottles($numBottles, $numExchange) {
$sum = $numBottles;
while ($numBottles >= $numExchange) {
$numBottles = $numBottles - $numExchange + 1;
$sum++;
}
return $sum;
}
}
/**
* @param {number} numBottles
* @param {number} numExchange
* @return {number}
*/
var numWaterBottles = function (numBottles, numExchange) {
let sum = numBottles;
while (numBottles >= numExchange) {
numBottles = numBottles - numExchange + 1;
sum++;
}
return sum;
};