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;
    }
}

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

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