分析:数学

显然最后的z是a和b的线性组合
也就是ax + by = z也就是说z是(a,b)的倍数
那就直接用gcd就好了
加个特判

ac code

class Solution:def canMeasureWater(self, jug1Capacity: int, jug2Capacity: int, targetCapacity: int) -> bool:if jug2Capacity == targetCapacity or jug1Capacity == targetCapacity:return Trueif jug1Capacity + jug2Capacity == targetCapacity:return Trueif jug1Capacity + jug2Capacity < targetCapacity:return False## ax + by = z (z % gcd(a, b) == 0)## 肥鼠定理if targetCapacity % math.gcd(jug1Capacity, jug2Capacity) == 0:return Truereturn False

dfs stack模拟

用栈模拟dfs
六种情况(x满x空,y满y空,x倒y,y倒x)
用set记录已经出现的情况即可(不用重复判断)

dfs ac code

class Solution:def canMeasureWater(self, x: int, y: int, z: int) -> bool:stack = [(0, 0)] # initialseen = set()while stack:# 先拿最后的remain_x, remain_y = stack.pop()# 判断是否成功if remain_x == z or remain_y == z:return Trueif remain_x + remain_y == z:return True# 是否出现过if (remain_x, remain_y) in seen:continue# 记录在案seen.add((remain_x, remain_y))# 6个append# x满stack.append((x, remain_y))# y满stack.append((remain_x, y))# x空stack.append((0, remain_y))# y空stack.append((remain_x, 0))# x -> ystack.append((remain_x - min(remain_x, y - remain_y), remain_y + min(remain_x, y - remain_y)))# y -> xstack.append((remain_x + min(remain_y, x - remain_x), remain_y - min(remain_y, x - remain_x)))return False

总结

用找规律发现了肥鼠表达式,使用了肥鼠定理
用栈模拟dfs,用seen表示已经出现过的情况,然后pop + append(多种情况)同时进行考虑
并考虑退出的条件

leetcode:365. 水壶问题【肥鼠定理,栈模拟dfs】相关推荐

  1. Leetcode.365 水壶问题

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

  2. Code POJ - 1780(栈模拟dfs)

    题意: 就是数位哈密顿回路 解析: 是就算了...尼玛还不能直接用dfs,得手动开栈模拟dfs emm...看了老大半天才看的一知半解 #include <iostream> #inclu ...

  3. LeetCode 365. 水壶问题

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

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

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

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

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

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

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

  7. LeetCode 365水壶问题(python)

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

  8. 每日一题-leetcode 365. 水壶问题

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

  9. Leetcode 365.水壶问题

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

最新文章

  1. Qt5的cmake文件位置
  2. PyTorch教程(一):张量数据类型
  3. Java操作memcache
  4. 成本管控难题怎么破?BI大神带你一步步拆解分析,节省成本390万
  5. 0804------算法笔记----------最长公共子序列
  6. 大数据之-Hadoop3.x_MapReduce_WordCount案例_Debug调试---大数据之hadoop3.x工作笔记0092
  7. outlook qr码在哪里_高能手办团兑换码有哪些 高能手办团哪里兑换
  8. WinCE下直接启动自己应用程序的方法
  9. yolov5学习率设置
  10. 韩顺平 java笔记 第8讲 this 类变量 第9讲 类方法
  11. 关于Java html table表格转excel
  12. 数据库系统概念 第六章 习题答案
  13. Github中文汉化插件—英语渣渣的福利(转)
  14. 【教程】最新微信视频号视频批量下载保存方法,非常简单的方法
  15. MySQL高级 知识点汇总
  16. ITIL 4 Foundation-指导原则
  17. 蚂蚁金服开发文档中心
  18. CentOS7密码忘记如何强制修改root密码
  19. 隐藏IP地址的4个好处
  20. 面向对象程序设计c++版董正言张聪课本课后习题答案第六章

热门文章

  1. Magnolia简介
  2. Django模型数据库配置
  3. Django常用命令django-admin.py和manage.py用法详解
  4. word插入公式(2):告别空格 ,公式居中,编号自动右对齐(适用于论文)
  5. php三元运算符 echo_php的三元运算符
  6. 美国最新调查显示 50% 企业已在用 ChatGPT,其中 48% 已让其代替员工,你怎么看?
  7. imaris如何导入3D结构数据,然后导出视频,导出图片
  8. Vmware虚拟机Ubuntu20无法上网
  9. [Android开发]cocos2dx工程中接入支付宝sdk
  10. 重庆阿尔克解读从1G到5G--手机网络技术发展史