文章目錄
- 前言
- 題目要求
- 由于題目很簡單,我們直接上程式,我們主要目的是它的解題思維
- 解法一
- 解法二
- 解法三
- 解法三是運用了遞回思想,其實更為嚴格來說:是運用數學的方面的知識
- 代碼
前言
雖然這個題很簡單,但是有趣它的解題思維的多樣性,我覺得還是很必要寫一寫的,
?
題目要求

簡單來說:就是我們買了 numBottles 瓶 冰闊樂(以前的那種玻璃瓶裝的,現在一些小餐館還有),店家告訴我們店里現在有活動,numExchange 個 空瓶子,可以換一瓶 冰闊樂,那我們肯定狂飲啊,幾個人現場直播吹闊樂, 問最后,我們一共吹了多少瓶?我們又不是傻,我們去數嘛!嘻嘻,
?
由于題目很簡單,我們直接上程式,我們主要目的是它的解題思維
解法一
class Solution {
public int numWaterBottles(int numBottles, int numExchange) {
int drink = numBottles;// 記錄喝了多少闊樂,剛開始買的可樂肯定拿來喝的,拿滿的換,那不是zz???
int isEmpty = numBottles;// 目前手上的空瓶,在我們眼里,這是不是一箱可樂,是一箱空瓶子!!
while(isEmpty>=numExchange){// 當空瓶子不滿足換酒條件時,跳出回圈
drink += isEmpty / numExchange;// 計算 手上的空瓶 可以換多少瓶闊樂,換到就是喝啊!肯定是不會讓它活到明天滴!
isEmpty = isEmpty / numExchange + isEmpty%numExchange;
// 空瓶換回來的闊樂,肯定是要喝完的!喝完了不就是空瓶了嘛! 再加上 手上還完,還 剩余 的 瓶子
// 就是 第一輪下來,手上剩余的瓶子,年輕人喝闊樂還信慫的?不存在滴!
// 拿著目前手上的瓶子,再繼續換,繼續吹!
}
// 此時 我們手上的瓶子,已經不足以換一瓶了,可樂party就此結束!
return drink;
}
}

?
解法二
class Solution {
public int numWaterBottles(int numBottles, int numExchange) {
int drink = numBottles;
int isEmpty = numBottles;
while(isEmpty>=numExchange){
isEmpty -= numExchange;// 給老板 numExchange 個空瓶,我手上就少 numExchange 個空瓶子
drink ++;// 給了老板瓶子,老板肯定是要給 闊樂,對不對?那么意味著又有一瓶闊樂要死我的嘴下!
isEmpty++;// 它掛了,, 我手上原本不富裕的戰利品又多了一個,,,
}
return drink;
}
}

?
解法三
此解法是建立于 解法二的基礎上,假設 每個2個空瓶子 就可以 換一瓶闊樂,也就是說我們手上少了2個空瓶子,多一瓶未開封的闊樂,但是這瓶闊樂喝完了,也就是一個空瓶子,也就是 我手上 又多了一個空瓶!也就是說 我們其實就給了老板一個空瓶子,也就是說 numExchange -1 個瓶子就能得到一瓶闊樂,
解法三就是按照這中思維去解決大的!(如果此時我向老板借一個瓶子,我能不能無限卡bug,,,,)
解法三是運用了遞回思想,其實更為嚴格來說:是運用數學的方面的知識

?
代碼
class Solution {
public int numWaterBottles(int numBottles, int numExchange) {
return numBottles >= numExchange ? (numBottles -numExchange)/(numExchange-1)+1+numBottles: numBottles;
// 冒號的回傳 numBottles 是因為你錢少了,不對,是買少了,,,
}
}

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/384238.html
標籤:java
