解法一

鸡冻,又一道自己独立解出来的问题! 加油骚年!!!

水壶问题,一开始自己思考嘛,想到肯定是要大壶往小壶里倒水,然后小壶倒满之后再倒掉,大壶继续倒水,在这个过程中,要考虑两种情况,第一种是小壶倒满的时候,大壶剩下的水是否 == z另一种情况是当小壶倒不满的时候(也是大壶倒空了需要重新加满的时候),这时候小壶的水+大壶的满水是否 == z。

那么需要倒到什么时候呢? 我用了一个最小公倍数来统计操作次数。 假设大小壶分别是11, 4,那么最小公倍数是44,也就是说(44-4)%11的操作要执行44/4=11 次,这块可以自己试一下,感觉写出来好麻烦的样子,我是自己纸上画了画搞出来的。

class Solution {
public:bool canMeasureWater(int x, int y, int z) {if (x + y < z) return false; if (x == 0 || y == 0) return z == 0 || x + y == z;    //判断 边界if(x>y)    //y为大壶 {int m = x;x = y;y = m;}long x1 = x;    //这里用long的原因是后面测试用例里的数据超过了int范围long y1 = y;long k = _lcm_(x1,y1);   //最小公倍数for(long i = k/x;i>-1;i--){k = k-x;if(k % y == z || (k%y+y) == z)    //判断能否达到z值return true;}return false;}//最小公倍数函数,辗转相除法求最大公约数,然后用乘积相除long _lcm_(long x, long y)       {long n = 0;long x2 = x;long y2 = y;while(x2 != 0){n = y2 % x2;y2 = x2;x2 = n;}return ((x*y)/(y2));}
};

最后时间复杂度是O(xy),空间复杂度还不会算 - - !

官方解法

贝祖定理???w t f???没听说过啊

贝祖定理告诉我们,ax+by=z 有解当且仅当 z 是 x, y 的最大公约数的倍数。因此我们只需要找到 x, y的最大公约数并判断 z 是否是它的倍数即可。

长见识了。。。附上证明链接

代码真是简洁明了啊,一行解决问题!!

class Solution {
public:bool canMeasureWater(int x, int y, int z) {if (x + y < z) return false;if (x == 0 || y == 0) return z == 0 || x + y == z;return z % gcd(x, y) == 0;   //gcd->求最大公约数}
};

时间复杂度:O(log(min(x, y))),取决于计算最大公约数所使用的辗转相除法。
空间复杂度:O(1),只需要常数个变量。

LeetCode每日一题———365. 水壶问题相关推荐

  1. LeetCode 每日一题 365.水壶问题

    有两个容量分别为 x升 和 y升 的水壶以及无限多的水.请判断能否通过使用这两个水壶,从而可以得到恰好 z升 的水? 如果可以,最后请用以上水壶中的一或两个来盛放取得的 z升 水. 你允许: 装满任意 ...

  2. leetcode每日刷题计划-简单篇day8

    leetcode每日刷题计划-简单篇day8 今天是纠结要不要新买手机的一天QAQ想了想还是算了吧,等自己赚钱买,加油 Num 70 爬楼梯 Climbing Stairs class Solutio ...

  3. Leetcode每日一题:171.excel-sheet-column-number(Excel表列序号)

    思路:就是168题的反命题,进制的方式完美解决: Leetcode每日一题:168.excel-sheet-column-title(Excel表名称) class Solution {public: ...

  4. 【LeetCode每日一题】1723. 完成所有工作的最短时间

    [LeetCode每日一题]1723. 完成所有工作的最短时间 [1] 1723. 完成所有工作的最短时间 [2] 473. 火柴拼正方形 [1] 1723. 完成所有工作的最短时间 题目: 给你一个 ...

  5. leetcode每日一题--雀巢原理;抽屉算法;Quorum机制;分布式应用

    leetcode每日一题 539. 最小时间差 示例 1: 输入:timePoints = ["23:59","00:00"] 输出:1 示例 2: 输入:ti ...

  6. LeetCode每日一题——1812. 判断国际象棋棋盘中一个格子的颜色

    LeetCode每日一题系列 题目:1812. 判断国际象棋棋盘中一个格子的颜色 难度:简单 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 给你一个坐标 coordinates ...

  7. 【LeetCode每日一题】——109.有序链表转换二叉搜索树

    文章目录 一[题目类别] 二[题目难度] 三[题目编号] 四[题目描述] 五[题目示例] 六[题目提示] 七[解题思路] 八[时间频度] 九[代码实现] 十[提交结果] 一[题目类别] 二叉树 二[题 ...

  8. leetcode每日一题·救生艇问题(Python)

    leetcode每日一题·救生艇问题(Python) 问题描述 题目入口 题目思路 首先分析问题,一个船最多坐两人,因此我们可以把这个问题看作两两组合的问题,并且如果最重的那个人和最轻的人加起来大于l ...

  9. LeetCode每日一题——904. 水果成篮

    LeetCode每日一题系列 题目:904. 水果成篮 难度:普通 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 你正在探访一家农场,农场从左到右种植了一排果树.这些树用一个整 ...

最新文章

  1. The source attachment does not contain the source for the file Activity.class
  2. Exchange2013恢复已删除用户邮箱
  3. xampp默认mysql数据库root密码的修改
  4. 源码安装的php如何启动脚本,PHP源码编译安装管理常用脚本
  5. x390拆机_用了七八年的笔记本电脑依然流畅如初,从X230i换到X390
  6. tomcat知识点总结
  7. 数据库删除表中多列语法总结
  8. python二级基础题,计算机二级python部分基础操作题
  9. Android Studio中Intent的一些相关知识
  10. 《周一清晨的领导课》--司机与乘客 - [读书笔记]
  11. ORACLE EBS常用表
  12. mysql分隔符_在sql文件中设置MySQL分隔符
  13. Linux 安装httpd(apache)超详细教程
  14. 【Ubuntu18.04 无法找到终端 ifconfig 命令】
  15. rabbitMq工作模式特性及整合springboot
  16. redhat9如何安装gcc
  17. python写一个网络测速脚本_Python实现网络测试的脚本分享详解
  18. python的词法结构(行、注释、文件编码、标识符、关键字和字面值)
  19. 顺序表和链表各自的优缺点
  20. ABOV单片机空工程文件的创建-[MC96F6332D]

热门文章

  1. 我的失业IT老公,准备出家了…
  2. 听微软老员工讲述他们是如何走进微软的
  3. win10系统如何配置web服务器,win10系统利用iis搭建web服务器的设置教程
  4. stm32控制led灯
  5. 使用python的seaborn、matplotlib、pyecharts绘制各种图形
  6. VueX里的mapGetters
  7. Redis持久化面试题
  8. unity 鼠标移动控制枪口方向
  9. java画空心金字塔
  10. 如何搭建团队协作知识库?