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