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

  • 装满任意一个水壶
  • 清空任意一个水壶
  • 从一个水壶向另外一个水壶倒水,直到装满或者倒空

方法一 深度优先遍历

每次操作的选择有
把 X 壶的水灌进 Y 壶,直至灌满或倒空;
把 Y 壶的水灌进 X 壶,直至灌满或倒空;
把 X 壶灌满;
把 Y 壶灌满;
把 X 壶倒空;
把 Y 壶倒空。
因此,每一步就循环对不同的操作进行遍历,直到遍历完全部可能。速度比较慢。借助外部存储记录遍历过的状态,减少重复遍历。

方法二 贝祖定理

因为每次有效操作只会让桶里的水总量增加 x,增加 y,减少 x,或者减少 y。因此我们的目标可以改写成:找到一对整数 a, b,使得

ax+by=z

而只要满足 z≤x+y,且这样的 a, b存在,那么我们的目标就是可以达成的。

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

class Solution {public boolean canMeasureWater(int x, int y, int z) {if(z==0){return true;}if(x+y<z){return false;}if(x==0||y=0){return x+y==z;   }int d=gcd(x,y);return z%d==0;}public int gcd(int a, int b){return b==0?a:gcd(b,a%b);}
}

每日一题 两个水桶问题相关推荐

  1. 力扣每日一题——两数相加II

    发现做的题难度始终不高,今天Leecode给了一个稍微难一点的题目.(前两天没更是因为去拔牙了~~>_<~~) 给你两个 非空 链表来代表两个非负整数.数字最高位位于链表开始位置.它们的每 ...

  2. 寒假每日一题——两句话中的不常见单词

    题目链接:https://leetcode-cn.com/problems/uncommon-words-from-two-sentences/ 题目描述 句子 是一串由空格分隔的单词.每个 单词 仅 ...

  3. 4月你好,愚人节果然是笨人,【LeetCode每日一题】1006. 笨阶乘

    4月你好,愚人节果然是笨人,[LeetCode每日一题]1006. 笨阶乘 今日题目1006题,每日一题微信交流群可以点击右下角:合作转载->联系我,拉你入群. 目前每日一题两个群,每天推送题目 ...

  4. 20200720:每日一题之两数之和Ⅱ(leetcode167)

    每日一题之两数之和Ⅱ 题目 思路与算法 代码实现 复杂度分析 题目 思路与算法 今日份笑点如下: 暴力遍历,视为TLE 双指针左右移动,根据大小判断左指针右移还是右指针左移,清晰易懂,为正解. 代码实 ...

  5. 【每日一题】不创建第三个变量,实现两数的交换 (品茗笔试题)

    [每日一题]不创建第三个变量,实现两数的交换(品茗笔试题) 题目: 不创建第三个变量,实现两数的交换.   交换两个数,我们最先会想到开辟第三个变量,再进行交换. //第三变量法 swap1(int* ...

  6. 【蓝桥杯】每日四道填空题(两道真题+两道模拟题)| 第三天

    专栏: 蓝桥杯--每日四道填空题(两道真题+两道模拟题) &离蓝桥杯已经不到一个月时间了,赶快刷起来吧,填空题一定别丢分!! ୧꒰•̀ᴗ•́꒱୨ 另一个专栏是: 蓝桥杯--编程题刷题营(每日四 ...

  7. LeetCode 每日一题 42. 接雨水 详细多种题解 C++描述

    LeetCode 每日一题 42. 接雨水 大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,一起加油吧~ 难度 困难 2020.04.04每日一题 ...

  8. Leetcode每日一题总目录(动态更新。。。)

    0. 概要 leecode每日一题(也可能多题)题解跟踪记录及总目录. 常用算法解题思路和技巧及数据结构: 预处理:数组排序(954),哈希表... 双指针法 682,125,905 单向链表 2 双 ...

  9. 算法笔记——每日一题(完结)

    算法笔记 From Now To My Death 前言 初级算法 1.两数之和 7.整数反转 9.回文数 14.最长公共前缀 27.移除元素[拷贝复制] 28.实现strStr()[双指针] 35. ...

最新文章

  1. D5RPG引擎的一些笔记
  2. linux学习笔记十四:安装SAMBA(Server Message Block)
  3. 文件数据分析制作过程【1】
  4. 安装vmware esx4.1
  5. stm32 输出PWM
  6. 模糊搜索时搜索结果中关键词变为不同颜色
  7. Percona Xtrabackup备份mysql大数据库(完整备份与增量备份)
  8. jQuery EasyUI Datagrid组件的完整的基础DOM结构
  9. 「镁客·请讲」安智汽车郭健:ADAS是一个链条式的系统,每个模块都必须做好...
  10. DevExpress控件库----AlertControl提示控件
  11. 据说网易搜索引擎-超越GOOGLE
  12. EOS Platform 7.2 安装
  13. er图 navicat_navicat怎么生成er图
  14. Clojure学习02:语法
  15. _Linux学习手册(二)—文件目录类命令
  16. 在ie6下文字颜色不兼容的解决方法
  17. tensor.detach() 和 tensor.data 的区别
  18. Dart教程(二):基本语法
  19. python urlretrieve下载进度_python《文件下载进度显示》 urllib.request.urlretrieve(self.__path,self.__name,jindu)...
  20. 【数据处理】——利用Excel VBA批量将详细地址转换成省市区三级行政区划

热门文章

  1. 吴恩达 tensorflow2.0 实践系列课程(3):NLP
  2. 《1024 程序员节》—我喂自己袋盐
  3. sql查询某个部门及其所以子部门信息
  4. Source insight 4.0 显示右边文件
  5. Markdown插入图片标注及使用emjoy表情
  6. 分享一个转义emjoy表情的方法
  7. Microsoft Platform SDK Febrary 2003下载(更新VC6的SDK)
  8. IPhone8 升级变砖复活记
  9. 原生js日历选择器插件开发实例教程
  10. 10个明亮的圣诞照片滤镜LR预设模板 10 Bright Christmas Desktop Mobile presets