题目描述
给定 numBottles
瓶水,用 numExchange
个空瓶可以兑换一瓶新水。
如果喝掉了水,那么瓶就会变成空的。
请你计算 最多 能喝到多少瓶水。
样例
输入:numBottles = 9, numExchange = 3
输出:13
解释:你可以用 3 个空瓶兑换 1 瓶水。
所以最多能喝到 9 + 3 + 1 = 13 瓶水。
输入:numBottles = 15, numExchange = 4
输出:19
解释:你可以用 4 个空瓶兑换 1 瓶水。
所以最多能喝到 15 + 3 + 1 = 19 瓶水。
输入:numBottles = 5, numExchange = 5
输出:6
输入:numBottles = 2, numExchange = 3
输出:2
限制
1 <= numBottles <= 100
2 <= numExchange <= 100
算法
(模拟) $O(\log n)$
- 按照题目模拟,每次计算当前瓶子换了水之后剩下的瓶子个数。
时间复杂度
- 每次瓶子个数至少会减半,所以时间复杂度为 $O(\log n)$。
空间复杂度
- 仅需要常数的额外空间。
C++ 代码
class Solution {
public:
int numWaterBottles(int numBottles, int numExchange) {
int ans = numBottles;
while (numBottles >= numExchange) {
ans += numBottles / numExchange;
numBottles = numBottles / numExchange + numBottles % numExchange;
}
return ans;
}
};
贴一个数学解法
大佬好像第二行打错了一个字......
手动捂脸
\滑稽