题目

类型:数学

image.png

解题思路

起始有 n 瓶酒,使用 m 个空酒瓶能够换得一瓶新酒(饮用数量加一,且新瓶子数量加一)。
对于每次交换而言,会损失掉 m−1 个瓶子。
利用每个回合损失的瓶子个数 m−1 为定值,可直接算出最大交换次数(额外饮用次数)换酒问题 - 图2,加上起始酒的个数即是答案。
注意边界条件:当 n 为 m−1 的倍数时,最后一个回合不满足兑换条件。

代码

  1. class Solution {
  2. public int numWaterBottles(int n, int m) {
  3. int cnt = n / (m - 1);
  4. return n % (m - 1) == 0 ? n + cnt - 1 : n + cnt;
  5. }
  6. }