365. 水壶问题

在这里插入图片描述

问题可以转化为找到m和n使得mx + ny = k,其中m,n可以为正数或负数。对于这类问题,数学上可以证明只要x,y的最大公约数能整除k,就存在一对m,n实现mx + ny = k。 因此问题就转化为寻找x,y的最大公约数是否能整除k。

class Solution {
    public boolean canMeasureWater(int x, int y, int z) {
        if(z == 0) return true;
        if((x==0 && y != z)|| (y==0 && x != z)) return false;
        if(x + y < z) return false;
        y = gcd(x,y);
        return z % y == 0;
    }
    private int gcd(int x,int y){
        return x%y==0?y:gcd(y,x%y);
    }
}
class Solution {
    public boolean canMeasureWater(int x, int y, int z) {
        if(z == 0) return true;
        if((x==0 && y != z)|| (y==0 && x != z)) return false;
        if(x + y < z) return false;
        int temp;
        while(x % y != 0){
            temp = x % y;
            x = y;
            y = temp;
        }
        return z % y == 0;
    }
}

你知道的越多,你不知道的越多。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章