365水壶问题(数学)
1、题目描述
有两个容量分别为 x升 和 y升 的水壶以及无限多的水。请判断能否通过使用这两个水壶,从而可以得到恰好 z升 的水?
如果可以,最后请用以上水壶中的一或两个来盛放取得的 z升 水。
你允许:
装满任意一个水壶
清空任意一个水壶
从一个水壶向另外一个水壶倒水,直到装满或者倒空
2、示例
输入: x = 3, y = 5, z = 4
输出: True
3、题解
解法一:
基本思想:递归dfs深度优先搜索,超时,将x与y相减得到的数cur保存至res,然后cur与res中所有数相减得到新的数加入res,这个过程中如果cur=z,则返回true
解法二:
基本思想:数学,贝祖定理,找到x,y的最大公约数能否z被整除
#include<iostream>
#include<vector>
#include<algorithm>
#include<set>
using namespace std;
class Solution {
public:set<int> res;bool canMeasureWater(int x, int y, int z) {//基本思想:递归dfs深度优先搜索,超时//将x与y相减得到的数cur保存至res,然后cur与res中所有数相减得到新的数加入res//这个过程中如果cur=z,则返回trueif(z==x||z==y||x+y==z||z==0) return true;res.insert(x);res.insert(y);int cur=x>y?x-y:y-x;return dfs(cur,z);}bool dfs(int cur,int z){if(res.find(cur)!=res.end())return false;if(cur==z)return true;for(auto iter=res.begin();iter!=res.end();iter++){if(cur+*iter==z)return true;}res.insert(cur);for(auto iter=res.begin();iter!=res.end();iter++){if(*iter==cur)continue;else if(*iter>cur&&dfs(*iter-cur,z))return true;else if(cur>*iter&&dfs(cur-*iter,z))return true;}return false;}
};
class Solution1 {
public:bool canMeasureWater(int x, int y, int z) {//基本思想:数学,找到x,y的最大公约数能否z被整除if (x + y < z)return false;if (z == 0 || x + y == z)return true;if(x>y) swap(x,y);if(x==0) return y==z;while(y%x!=0){int temp=x;x=y%x;y=temp;}return z % x == 0;}};
int main()
{Solution1 solute;int x=2,y=6,z=5;cout<<solute.canMeasureWater(x,y,z)<<endl;return 0;
}
365水壶问题(数学)相关推荐
- Leetcode.365 水壶问题
题目链接 Leetcode.365 水壶问题 mid 题目描述 有两个水壶,容量分别为 x和 y升.水的供应是无限的.确定是否有可能使用这两个壶准确得到 z升. 如果可以得到 z升水,最后请用以上水壶 ...
- LeetCode 365. 水壶问题
365. 水壶问题 题目链接-365. 水壶问题 解题思路 裴蜀定理 裴蜀等式:若a,ba,ba,b是整数,且gcd(a,b)=dgcd(a,b)=dgcd(a,b)=d,那么对于任意的整数x,yx, ...
- [LeetCode解题报告] 365. 水壶问题
[LeetCode解题报告] 365. 水壶问题 一. 题目 1. 题目描述 2. 原题链接 二. 解题报告 1. 思路分析 2. 复杂度分析 3. 代码实现 三. 本题小结 一. 题目 1. 题目描 ...
- 365. 水壶问题-暴力模拟倒水过程-递归法
365. 水壶问题-暴力模拟倒水过程-递归法 有两个水壶,容量分别为 jug1Capacity 和 jug2Capacity 升.水的供应是无限的.确定是否有可能使用这两个壶准确得到 targetCa ...
- 365 水壶问题(递归、数学-裴蜀定理)
1. 问题描述: 有两个容量分别为 x升和 y升的水壶以及无限多的水.请判断能否通过使用这两个水壶,从而可以得到恰好z升的水? 如果可以,最后请用以上水壶中的一或两个来盛放取得的z升水. 你允许: 装 ...
- 365.水壶问题笔记
水壶问题 Leetcode题号:365 题目内容 有两个容量分别为 x升 和 y升 的水壶以及无限多的水.请判断能否通过使用这两个水壶,从而可以得到恰好 z升 的水? 如果可以,最后请用以上水壶中的一 ...
- 【深度优先+重写hash(C++)】365. 水壶问题
题目描述 有两个水壶,容量分别为 x 和 y 升.水的供应是无限的.确定是否有可能使用这两个壶准确得到 target 升. 如果可以得到 target 升水,最后请用以上水壶中的一或两个来盛放取得的 ...
- leetcode 365. Water and Jug Problem | 365. 水壶问题(Java)
题目 https://leetcode.com/problems/water-and-jug-problem/ 又是踩比赞多的一道题-我认为有两个可能的原因: 虽然通过了,但原理不明了. 本质是个数学 ...
- LeetCode 365. 水壶问题(最大公约数)
文章目录 1. 题目 2. 最大公约数 1. 题目 有两个容量分别为 x升 和 y升 的水壶以及无限多的水.请判断能否通过使用这两个水壶,从而可以得到恰好 z升 的水? 如果可以,最后请用以上水壶中的 ...
最新文章
- IIS负载均衡-Application Request Route详解第三篇:使用ARR进行Http请求的负载均衡(上)...
- 队列——PowerShell版
- 计算机程序输入x是3求输出七年级的题,如图所示是计算机程序计算,若开始输入,则最后输出的结果是 ▲ . ——青夏教育精英家教网——...
- Transaction rolled back because it has been marked as rollback-only
- 安卓进阶系列-05列表控件(RecyclerView)的使用
- 【热点报道】2013eoe移动开发者大会圆满落幕
- 【BootStrap】 概述 CSS
- Android_Jar mismatch! Fix your dependencies
- 【Flink】ValidationException: Could not find any factory for identifier json
- java unicode32_【JAVA SE基础篇】32.String类入门
- df 根据文件名找到挂载点原理
- oracle用户登录提示: user test lacks create session privilege logon denied
- 互联网常见的大数据分析指标
- DX11 游戏开发笔记 (二) DX11 基础框架 上
- PDF怎么转换成Excel?转后一页一个子表怎么合并?
- C语言程序设计(第三版)何钦铭著 习题5-3
- django重置密码发送html邮件,django 开发忘记密码通过邮箱找回功能示例
- 国产开源优秀新一代MPP数据库StarRocks入门之旅-数仓新利器(上)
- 今日,首款国产超小体积5G通信模组商用!
- 【1072】鸡尾酒疗法