LeetCode——365.水壶问题(Java)

今天的题我看下面有数学标签,我就直接自己想了数学方法解决。
因为这里的水壶只能三种操作,倒水,接水,互相倒水。
可以直接想到用数学方法进行计算。

package LeetCode.OneToFiveHundred;

public class ThreeHundredAndSixthFive {
    public boolean canMeasureWater(int x, int y, int z) {
    //当x + y < z时很明显的就能知道不能装满z
        if (x + y < z) return false;
       //同理,想想就能知道
        if (z == 0 || x + y == z) return true;
        //这里我们使用贝祖定理来计算最小的公倍数
        //最小公倍数的倍数如果能等于z则说明能装满】
        //这里要考虑被除数不能为0的情况x = y == 0 ?
        return z % (x = y == 0 ? gcd(y, x): gcd(x, y)) == 0;

    }
    //贝祖定理的实现
    private int gcd(int x, int y){
        return x % y == 0 ? y : gcd(y, x % y);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值