1518. Water Bottles

class Solution {
public:
    int numWaterBottles(int numBottles, int numExchange)
    {
        // 記錄總共喝掉的水瓶數量
        int res = 0;

        // while 迴圈會持續執行,直到剩下的瓶子數量小於可以換一個新瓶子所需的數量
        while (numBottles >= numExchange)
        {
            // 計算無法換新瓶子的剩餘瓶子數
            int m = numBottles % numExchange;

            // 將這次能喝的瓶子數(當前所有瓶子減去無法換的瓶子)加到結果中。
            res += numBottles - m;

            // 更新剩餘的瓶子數,包括無法換的瓶子(m)和換來的新瓶子(numBottles / numExchange)
            numBottles = m + numBottles / numExchange;
        }
        return res + numBottles;
    }
};
  • T: O(logN)O(\log N)
  • S: O(1)O(1)