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

本文探讨了jugproblem问题,即如何使用两个特定容量的罐子(x和y升)来精确测量目标容量z升的水。文章介绍了问题背景、解决思路,并通过裴蜀定理给出了判断解存在的条件。

题意

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

可做的:

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

思路

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

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

mx+ny=z

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

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

并且还需要满足 x+yz

代码

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;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值