一、题目

演示示例:


二、测试代码

//方法一  数学
class Solution {public int numWaterBottles(int numBottles, int numExchange) {return (numBottles * numExchange - 1) / (numExchange - 1);}
}//方法二 递归
class Solution {public int numWaterBottles(int numBottles, int numExchange) {if(numBottles<numExchange){return numBottles;}int count1=numBottles/numExchange;//当前可换酒数量int count2=numBottles%numExchange;//当前剩余酒数量int count3=numBottles-count2;count3+=numWaterBottles(count1+count2,numExchange);//递归重新计算return count3;}
}

三、运行情况

方法一:

方法二:

四、刷题总结

方法一的主要思路:以numBottles = 15, numExchange = 4为例。 开始可以喝掉15瓶酒,得到15个空瓶子。每次拿4个空瓶子兑换一瓶酒并喝掉,得到1个新瓶子,空瓶子净损失 4 - 1 = 3个。总共兑换4次,则最终喝掉15+4=19瓶酒。由此可发现,每次兑换剩余空瓶净减少4-1=3个。现设兑换次数为 t ,b=numBottles,e=numExchange,则有公式:b-(t-1)*(e-1)>=e,需要找到满足条件的最大的 t 。其可以解释为每次兑换净减少 b-1 个空瓶,进行 t -1 次兑换后,剩下空瓶数为 b -(t-1) * (e-1),该空瓶数能完成最后一次兑换。化简后为 t<=(b−1) / (e−1)

方法二的主要思路:设初始有n瓶酒,每m个空瓶可以换1 瓶酒,设此时可以喝酒总数为 f(n,m)。又设a为当前状态可以换得的新酒数量,b为剩下的空瓶,即有n/m=a…b(b为余数),即有递归式:f(n,m)=(n-b)+f(a+b,m)。

LeetCode刷题进阶之换酒问题(1518)相关推荐

  1. C#LeetCode刷题之#709-转换成小写字母(To Lower Case)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3965 访问. 实现函数 ToLowerCase(),该函数接收一 ...

  2. C#LeetCode刷题-字符串

    字符串篇 # 题名 刷题 通过率 难度 3 无重复字符的最长子串 24.6% 中等 5 最长回文子串 22.4% 中等 6 Z字形变换 35.8% 中等 8 字符串转整数 (atoi) 15.3% 中 ...

  3. LeetCode刷题指南

    CSDN话题挑战赛第1期 活动详情地址:https://marketing.csdn.net/p/bb5081d88a77db8d6ef45bb7b6ef3d7f 参赛话题:Leetcode刷题指南 ...

  4. 个人LeetCode刷题记录(带题目链接及解答)持续更新

    Leetcode 刷题 注:~[完成]代表还有一些方法没看,最后再看 一.一些需要重刷的典型题: 1.快速排序,归并排序,堆排序(递归的思想) 2.链表中的回文链表,其中的快慢指针,多看,多练 3.链 ...

  5. LeetCode刷题C++实录

    LeetCode刷题C++实录 1. 两数之和 121. 买卖股票的最佳时机 382. 链表随机节点 622. 设计循环队列 623. 在二叉树中增加一行 640. 求解方程 761. 特殊的二进制序 ...

  6. LeetCode刷题记录8——605. Can Place Flowers(easy)

    LeetCode刷题记录8--605. Can Place Flowers(easy) 目录 LeetCode刷题记录8--605. Can Place Flowers(easy) 题目 语言 思路 ...

  7. LeetCode刷题指南!

    Datawhale学习 举办方:Datawhale.天池.LeetCode 为了帮助小伙伴更好地准备笔试,拿到春招offer,Datawhale联合天池.LeetCode推出24天刷题指南,组织了Le ...

  8. c语言贪心算法合并箭,LeetCode刷题题库:贪心算法

    LeetCode刷题笔记:贪心算法 自大学开始,我便陆陆续续的学习一些 算法和数据结构 方面的内容,同时也开始在一些平台刷题,也会参加一些大大小小的算法竞赛.但是平时刷题缺少目的性.系统性,最终导致算 ...

  9. 【恋上数据结构】复杂度知识以及LeetCode刷题指南

    基础知识 什么是算法? 如何评判一个算法的好坏? 大O表示法(Big O) 对数阶的细节 常见的复杂度 多个数据规模的情况 LeetCode刷题指南 斐波那契数列复杂度分析 斐波那契数列 - 递归 斐 ...

最新文章

  1. Django-缓存的配置
  2. 【深度学习】基于Pytorch的softmax回归问题辨析和应用(二)
  3. win10计算机拒绝访问,教你win10系统c盘拒绝访问怎么办
  4. phpcms发布新闻到数据库_Phpcms V9网站从本地上传到服务器需要修改的地方小结
  5. linux小波识别算法,人脸识别相关技术之小波变换
  6. 交互原型细节提升之路
  7. JAVA单例模式:懒汉式,饿汉式
  8. ESP8266—“ICACHE_FLASH_ATTR”宏
  9. linux/window 下 solr5.1 tomcat7.x 环境搭建即简单功能测试
  10. C# Word 转PDF
  11. C 语言会比 C++ 快?
  12. stringbuilder 拼接语句缺失右括号_C++编程基础: 6. 语句、表达式和运算符
  13. 【POJ 1456】Supermarket【两种做法】【二叉堆贪心】【并查集】
  14. 海量数据实时计算系统在高并发互联网应用中的原理和实践
  15. 中国城市统计年鉴下载
  16. 什么方法可以显著提高程序员工作效率
  17. 图片轮播实现示例代码
  18. mariadb无法访问
  19. 大一就开始参加电赛?看学长是咋学的!
  20. JAVA面试解析(有赞一面)

热门文章

  1. UC编程9-管道pipe操作和共享内存段shm操作
  2. mysql查询所有的Java工程师信息_JAVA开发工程师 | 广州三地信息技术有限公司
  3. 软件工程期末复习(一小时通过考试,全是重点)
  4. javascript入门_Netlify入门:部署JavaScript应用程序的最简单方法
  5. [VHDL] 案例模板——就算忘了也要把知识塞入大脑
  6. 让U盘作为系统启动钥匙
  7. centos 初学者_初学者的时间序列
  8. 2019三星比2018好在哪_2018年:三星S9再见了!2019年:三星S10我来了!
  9. php mql获取结果集,promql查询表达式
  10. 诺基亚实现10Gbps对称数据传输