通过万岁!!!
- 题目:先买numBottles瓶酒,然后numExchange个空瓶子,可以换一瓶,问一共能喝多少瓶。
- 思路:记录当前的空瓶子数量就行了,空瓶子数量。
- 技巧:
- 需要注意的是空瓶子数量等于商+余数。商表示本次能换的,余数表示之前还剩下的空瓶子。
- 此外还需要一个while循环,而循环退出的条件是,手里的空瓶子,不能再兑换酒了。
伪代码
首先,如果我们买的酒不足以换下一次的话,那就直接返回numBottles,因为我们就买了这些。
首先定义返回变量ans,并且ans初始化应该等于numBottles,因为这些酒是一定能喝到的。
然后定义变量余数和商,并分别先计算一下。商就是能换的个数,余数就是还完之后还剩多少空瓶子。
ans需要+=商,因为商这些是又能喝到的
while循环,只要我新换的(商)和之前的(余数)是大于等于numExchange,也就是还能换
那就重新计算余数和商,这里需要一个临时变量的,不懂的可以看实现部分,就懂了
ans+=本次换的商
return ans
java代码
class Solution {
public int numWaterBottles(int numBottles, int numExchange) {
if (numBottles < numExchange) return numBottles;
int ans = numBottles;
int remainder = numBottles % numExchange;
int business = numBottles / numExchange;
ans += business;// 上面已经兑换过一次了
while (business + remainder >= numExchange) {// 余数加商
numBottles = business;// 这里需要一个临时变量,因为下面两行都需要business和remainder,但是前面一行会改变一个值
business = (business + remainder) / numExchange;
remainder = (numBottles + remainder) % numExchange;
ans += business;
}
return ans;
}
}
- 总结:题目不是难,唯一需要主义的就是换的时候是余数+商,余数表示之前剩下的空瓶子,商表示我刚刚换了以后得到的瓶子。