LeetCode - 1518 - 换酒问题 - java - 细节喔~

x33g5p2x  于2021-12-17 转载在 Java  
字(1.1k)|赞(0)|评价(0)|浏览(304)

前言

题目要求

由于题目很简单,我们直接上程序,我们主要目的是它的解题思维

解法一

  1. class Solution {
  2. public int numWaterBottles(int numBottles, int numExchange) {
  3. int drink = numBottles;// 记录喝了多少阔乐,刚开始买的可乐肯定拿来喝的,拿满的换,那不是zz???
  4. int isEmpty = numBottles;// 目前手上的空瓶,在我们眼里,这是不是一箱可乐,是一箱空瓶子!!
  5. while(isEmpty>=numExchange){// 当空瓶子不满足换酒条件时,跳出循环
  6. drink += isEmpty / numExchange;// 计算 手上的空瓶 可以换多少瓶阔乐,换到就是喝啊!肯定是不会让它活到明天滴!
  7. isEmpty = isEmpty / numExchange + isEmpty%numExchange;
  8. // 空瓶换回来的阔乐,肯定是要喝完的!喝完了不就是空瓶了嘛! 再加上 手上还完,还 剩余 的 瓶子
  9. // 就是 第一轮下来,手上剩余的瓶子,年轻人喝阔乐还信怂的?不存在滴!
  10. // 拿着目前手上的瓶子,再继续换,继续吹!
  11. }
  12. // 此时 我们手上的瓶子,已经不足以换一瓶了,可乐party就此结束!
  13. return drink;
  14. }
  15. }

解法二

  1. class Solution {
  2. public int numWaterBottles(int numBottles, int numExchange) {
  3. int drink = numBottles;
  4. int isEmpty = numBottles;
  5. while(isEmpty>=numExchange){
  6. isEmpty -= numExchange;// 给老板 numExchange 个空瓶,我手上就少 numExchange 个空瓶子
  7. drink ++;// 给了老板瓶子,老板肯定是要给 阔乐,对不对?那么意味着又有一瓶阔乐要死我的嘴下!
  8. isEmpty++;// 它挂了。。 我手上原本不富裕的战利品又多了一个。。。
  9. }
  10. return drink;
  11. }
  12. }

解法三

解法三是运用了递归思想,其实更为严格来说:是运用数学的方面的知识

代码

  1. class Solution {
  2. public int numWaterBottles(int numBottles, int numExchange) {
  3. return numBottles >= numExchange ? (numBottles -numExchange)/(numExchange-1)+1+numBottles: numBottles;
  4. // 冒号的返回 numBottles 是因为你钱少了,不对,是买少了。。。
  5. }
  6. }

相关文章

最新文章

更多