- 前言
- 题目要求
- 由于题目很简单,我们直接上程序,我们主要目的是它的解题思维
- 解法一
- 解法二
- 解法三
- 解法三是运用了递归思想,其实更为严格来说:是运用数学的方面的知识
- 代码
前言
虽然这个题很简单,但是有趣它的解题思维的多样性,我觉得还是很必要写一写的。
题目要求
简单来说:就是我们买了 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 是因为你钱少了,不对,是买少了。。。 } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)