1、小區便利店正在**,用 numexchange 個空酒瓶可以兌換一瓶新酒。你購入了 numbottles 瓶酒。如果喝掉了酒瓶中的酒,那麼酒瓶就會變成空的。請你計算最多能喝到多少瓶酒。
方法一:模擬:
思路:首先我們一定可以喝到 b瓶酒,剩下 b個空瓶。接下來我們可以拿瓶子換酒,每次拿出 e個瓶子換一瓶酒,然後再喝完這瓶酒,得到乙個空瓶。以此類推,我們可以統計得到答案。
福再度分析:
時間複雜度:o(b/e),因為e≥2,而迴圈迭代時,每次 b 的變化為e−1,故這裡的漸進上界為 o(b/e)。
空間複雜度:o(1)
public
intnumwaterbottles
(int numbottles,
int numexchange)
return drinknum;
}
方法二:貪心法:複雜度分析:
時間複雜度:o(b/e)
空間複雜度:o(1)
思路:這道題其實考察的是數學思想,首先有多少瓶numbottles就喝了多少瓶酒,此刻空瓶emptybottles,然後就是把這些空瓶去兌換酒,那能兌換emptybottles//numexchange瓶,必須是向下取整,現在還剩emptybottles%numexchange+emptybottles/numexchange個空瓶可以去兌換,就這樣迴圈下去,直到可換的瓶數少於換瓶的條件截止。
/**
* 貪心演算法:每次把手裡的空瓶換成酒
* @param numbottles
* @param numexchange
* @return
*/public
intnumwaterbottles2
(int numbottles,
int numexchange)
return drinknum;
}
方法三:數學法:複雜度分析
時間複雜度:o(1)
空間複雜度:o(1)
* 數學法:drinknum = b+(b-e)/(e-1) +1
* @param numbottles
* @param numexchange
* @return
*/public
intnumwaterbottles3
(int numbottles,
int numexchange)
LeetCode 1518 換酒問題
小區便利店正在 用 numexchange 個空酒瓶可以兌換一瓶新酒。你購入了 numbottles 瓶酒。如果喝掉了酒瓶中的酒,那麼酒瓶就會變成空的。請你計算 最多 能喝到多少瓶酒。示例 1 輸入 numbottles 9,numexchange 3 輸出 13 解釋 你可以用 3 個空酒瓶兌換 ...
力扣Leetcode 1518 換酒問題
小區便利店正在 用 numexchange 個空酒瓶可以兌換一瓶新酒。你購入了 numbottles 瓶酒。如果喝掉了酒瓶中的酒,那麼酒瓶就會變成空的。請你計算 最多 能喝到多少瓶酒。示例 輸入 numbottles 9,numexchange 3 輸出 13 解釋 你可以用 3 個空酒瓶兌換 1 ...
1518 換酒問題
小區便利店正在 用 numexchange 個空酒瓶可以兌換一瓶新酒。你購入了 numbottles 瓶酒。如果喝掉了酒瓶中的酒,那麼酒瓶就會變成空的。請你計算 最多 能喝到多少瓶酒。示例 1 輸入 numbottles 9,numexchange 3 輸出 13 解釋 你可以用 3 個空酒瓶兌換 ...