有两个水壶,容量分别为 jug1Capacity 和 jug2Capacity 升。水的供应是无限的。确定是否有可能使用这两个壶准确得到 targetCapacity 升。

如果可以得到 targetCapacity 升水,最后请用以上水壶中的一或两个来盛放取得的 targetCapacity 升水。

你可以:

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

示例 1:

输入: jug1Capacity = 3, jug2Capacity = 5, targetCapacity = 4
输出: true
解释:来自著名的 “Die Hard”
示例 2:

输入: jug1Capacity = 2, jug2Capacity = 6, targetCapacity = 5
输出: false
示例 3:

输入: jug1Capacity = 1, jug2Capacity = 2, targetCapacity = 3
输出: true

java代码:

class Solution {public boolean canMeasureWater(int x, int y, int z) {Deque<int[]> stack = new LinkedList<int[]>();stack.push(new int[]{0, 0});Set<Long> seen = new HashSet<Long>();while (!stack.isEmpty()) {if (seen.contains(hash(stack.peek()))) {stack.pop();continue;}seen.add(hash(stack.peek()));int[] state = stack.pop();int remain_x = state[0], remain_y = state[1];if (remain_x == z || remain_y == z || remain_x + remain_y == z) {return true;}// 把 X 壶灌满。stack.push(new int[]{x, remain_y});// 把 Y 壶灌满。stack.push(new int[]{remain_x, y});// 把 X 壶倒空。stack.push(new int[]{0, remain_y});// 把 Y 壶倒空。stack.push(new int[]{remain_x, 0});// 把 X 壶的水灌进 Y 壶,直至灌满或倒空。stack.push(new int[]{remain_x - Math.min(remain_x, y - remain_y), remain_y + Math.min(remain_x, y - remain_y)});// 把 Y 壶的水灌进 X 壶,直至灌满或倒空。stack.push(new int[]{remain_x + Math.min(remain_y, x - remain_x), remain_y - Math.min(remain_y, x - remain_x)});}return false;}public long hash(int[] state) {return (long) state[0] * 1000001 + state[1];}
}

每日一题-leetcode 365. 水壶问题相关推荐

  1. Leetcode.365 水壶问题

    题目链接 Leetcode.365 水壶问题 mid 题目描述 有两个水壶,容量分别为 x和 y升.水的供应是无限的.确定是否有可能使用这两个壶准确得到 z升. 如果可以得到 z升水,最后请用以上水壶 ...

  2. LeetCode 365. 水壶问题

    365. 水壶问题 题目链接-365. 水壶问题 解题思路 裴蜀定理 裴蜀等式:若a,ba,ba,b是整数,且gcd(a,b)=dgcd(a,b)=dgcd(a,b)=d,那么对于任意的整数x,yx, ...

  3. LeetCode 365. 水壶问题(最大公约数)

    文章目录 1. 题目 2. 最大公约数 1. 题目 有两个容量分别为 x升 和 y升 的水壶以及无限多的水.请判断能否通过使用这两个水壶,从而可以得到恰好 z升 的水? 如果可以,最后请用以上水壶中的 ...

  4. LeetCode —— 365. 水壶问题(Python3)

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

  5. 每日一题 -- LeetCode (十六)

    JavaScript / TypeScript for LeetCode 当前进程: 开始时间:2020.6.27 结束时间:undefined GitHub仓库:https://github.com ...

  6. Leetcode 365.水壶问题

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

  7. LeetCode 365水壶问题(python)

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

  8. LeetCode——365.水壶问题【贝祖定理】

    题解 AC-Code using PII = pair<int, int>;class Solution {public:bool canMeasureWater(int x, int y ...

  9. 每日一题 leetcode 997. 找到小镇的法官 java

    class Solution {public int findJudge(int n, int[][] trust) {if(trust.length==0){if(n==1) return 1;el ...

最新文章

  1. YOLO系列综述:从V1到V4
  2. 双系统grub启动linux,双系统ubuntu与Centos的grub启动(解决VFS报错)
  3. Maven : [ERROR] Project xxx is duplicated in the reactor @
  4. html鼠标平滑滚动效果,JS特效代码 JS动态平滑滚动菜单效果
  5. 如何更新深度linux系统软件,deepin深度系统更新了哪些内容? 最新版deepin更新内容汇总...
  6. AD怎么设置相同网络的线宽
  7. http 连接池 java_HttpClient 连接池管理
  8. Stata做KHB中介效应分析
  9. 广东最美的历史古村落,再不去就没了
  10. 新猿木子李:0基础学python培训教程 Python操作Redis
  11. 多卡聚合设备基于融合系统指挥平台的解决方案
  12. 百度地图-新手入门教程
  13. excel公式编写简化,Python生成公式
  14. 售前和产品经理有何区别?
  15. 记录佩戴耳机时长App开发
  16. 你知道 kubectl exec 的运行机制是什么吗?
  17. 2018-2019-2 20175227张雪莹《Java程序设计》 实验二《Java面向对象程序设计》
  18. LOGO的主要作用是什么?logo设计都有着哪些设计规则?
  19. [译]借助函数完成可组合的数据类型(软件编写)(第十部分)
  20. matlab 双边沿滤波,一种基于数字PWM发生器的左增长双边沿UPWM信号频谱估计方法与流程...

热门文章

  1. 把windows系统的默认编码改成UTF-8
  2. 部分ERP软件技术指标分析报告
  3. 怎么关闭qq影音高清加速功能?
  4. 2021-2025年中国现场声音放大器行业市场供需与战略研究报告
  5. Jupyter 主题设置
  6. 快看漫画升级为快看,用漫剧推动行业进入视频时代
  7. react 递归遍历四层树结构 遍历分支中的最后一个节点_图解:数据结构中的 6 种树,你心中有数吗?...
  8. Android App接管手势处理TouchEvnet中单点触摸和多点触控的讲解及实战(附源码 超简单实用)
  9. MySQL数据库之基本语法
  10. 必读:2022年被引用最多的100篇人工智能论文