1518.换酒问题
题目描述
思路
数学
做这个题,最开始想到了那个如果最后差一个空瓶可以换酒喝找老板借一个空瓶换酒喝完还回去的思路,但是在示例4中,显然这个解法是有问题的。所以不能考虑借空瓶的情况。
那么这道题逻辑就很简单了。第一步将手中的酒喝完,假定共有b瓶酒,每次换酒需要e个空瓶,则喝完共有b个空瓶。第二步,将空瓶换酒,每次换一瓶就回来,就意味着交出e-1个空瓶,则第二轮喝完需要满足找到最小的n使得
b
−
n
∗
(
e
−
1
)
<
e
b-n*(e-1) < e
b−n∗(e−1)<e。当然这一步要注意前提条件是b≥e,如果b<e,则不可能换酒喝。
Python实现
class Solution:
def numWaterBottles(self, numBottles: int, numExchange: int) -> int:
return numBottles + (numBottles - 1) // (numExchange - 1)
Java实现
class Solution {
public int numWaterBottles(int numBottles, int numExchange) {
return numBottles + (numBottles - 1) / (numExchange - 1);
}
}