首页 > 学院 > 开发设计 > 正文

Leetcode 365 - Water and Jug Problem(裴蜀定理)

2019-11-06 07:43:51
字体:
来源:转载
供稿:网友

题意

jug PRoblem,给2个罐子,容积为x和y,给定整数z,问能否用x和y凑出z的水。

可做的:

将任一罐子装满水。将任一罐子的水倒掉。将一个罐子的水倒到另一个罐子直到该罐子为空或者另一罐子装满。

思路

如果求最短步数可以通过bfs来做,这道题只需要判断能否有解。

其中步骤3是水在x和y之间流通并不会造成损失,而步骤1和2可以列出如下方程:

mx+ny=z

即我们要做的就是判断是否有解。

根据裴蜀定理,我们只需要判断z是否是x和y的最大公约数g的整数倍即可。

并且还需要满足x+y≥z

代码

class Solution {public: bool canMeasureWater(int x, int y, int z) { if (x == 0 || y == 0) return z == x || z == y; int g = __gcd(x, y); return !(z % g) && x + y >= z; }};
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表