leetcode:365. 水壶问题【肥鼠定理,栈模拟dfs】
分析:数学
显然最后的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】相关推荐
- Leetcode.365 水壶问题
题目链接 Leetcode.365 水壶问题 mid 题目描述 有两个水壶,容量分别为 x和 y升.水的供应是无限的.确定是否有可能使用这两个壶准确得到 z升. 如果可以得到 z升水,最后请用以上水壶 ...
- Code POJ - 1780(栈模拟dfs)
题意: 就是数位哈密顿回路 解析: 是就算了...尼玛还不能直接用dfs,得手动开栈模拟dfs emm...看了老大半天才看的一知半解 #include <iostream> #inclu ...
- LeetCode 365. 水壶问题
365. 水壶问题 题目链接-365. 水壶问题 解题思路 裴蜀定理 裴蜀等式:若a,ba,ba,b是整数,且gcd(a,b)=dgcd(a,b)=dgcd(a,b)=d,那么对于任意的整数x,yx, ...
- LeetCode——365.水壶问题【贝祖定理】
题解 AC-Code using PII = pair<int, int>;class Solution {public:bool canMeasureWater(int x, int y ...
- LeetCode —— 365. 水壶问题(Python3)
有两个容量分别为 x升 和 y升 的水壶以及无限多的水.请判断能否通过使用这两个水壶,从而可以得到恰好 z升 的水? 如果可以,最后请用以上水壶中的一或两个来盛放取得的 z升水. 你允许: 装满任意一 ...
- LeetCode 365. 水壶问题(最大公约数)
文章目录 1. 题目 2. 最大公约数 1. 题目 有两个容量分别为 x升 和 y升 的水壶以及无限多的水.请判断能否通过使用这两个水壶,从而可以得到恰好 z升 的水? 如果可以,最后请用以上水壶中的 ...
- LeetCode 365水壶问题(python)
题目描述: 有两个容量分别为 x升 和 y升 的水壶以及无限多的水.请判断能否通过使用这两个水壶,从而可以得到恰好 z升 的水? 如果可以,最后请用以上水壶中的一或两个来盛放取得的 z升 水. 你允许 ...
- 每日一题-leetcode 365. 水壶问题
有两个水壶,容量分别为 jug1Capacity 和 jug2Capacity 升.水的供应是无限的.确定是否有可能使用这两个壶准确得到 targetCapacity 升. 如果可以得到 target ...
- Leetcode 365.水壶问题
水壶问题 有两个容量分别为 x升和 y升的水壶以及无限多的水.请判断能否通过使用这两个水壶,从而可以得到恰好 z升的水? 如果可以,最后请用以上水壶中的一或两个来盛放取得的 z升 水. 你允许: 装满 ...
最新文章
- Qt5的cmake文件位置
- PyTorch教程(一):张量数据类型
- Java操作memcache
- 成本管控难题怎么破?BI大神带你一步步拆解分析,节省成本390万
- 0804------算法笔记----------最长公共子序列
- 大数据之-Hadoop3.x_MapReduce_WordCount案例_Debug调试---大数据之hadoop3.x工作笔记0092
- outlook qr码在哪里_高能手办团兑换码有哪些 高能手办团哪里兑换
- WinCE下直接启动自己应用程序的方法
- yolov5学习率设置
- 韩顺平 java笔记 第8讲 this 类变量 第9讲 类方法
- 关于Java html table表格转excel
- 数据库系统概念 第六章 习题答案
- Github中文汉化插件—英语渣渣的福利(转)
- 【教程】最新微信视频号视频批量下载保存方法,非常简单的方法
- MySQL高级 知识点汇总
- ITIL 4 Foundation-指导原则
- 蚂蚁金服开发文档中心
- CentOS7密码忘记如何强制修改root密码
- 隐藏IP地址的4个好处
- 面向对象程序设计c++版董正言张聪课本课后习题答案第六章
热门文章
- Magnolia简介
- Django模型数据库配置
- Django常用命令django-admin.py和manage.py用法详解
- word插入公式(2):告别空格 ,公式居中,编号自动右对齐(适用于论文)
- php三元运算符 echo_php的三元运算符
- 美国最新调查显示 50% 企业已在用 ChatGPT,其中 48% 已让其代替员工,你怎么看?
- imaris如何导入3D结构数据,然后导出视频,导出图片
- Vmware虚拟机Ubuntu20无法上网
- [Android开发]cocos2dx工程中接入支付宝sdk
- 重庆阿尔克解读从1G到5G--手机网络技术发展史