leetcode 365. 水壺問題【最大公約數】

題目鏈接:365. 水壺問題

有兩個容量分別爲 x升 和 y升 的水壺以及無限多的水。請判斷能否通過使用這兩個水壺,從而可以得到恰好 z升 的水?

如果可以,最後請用以上水壺中的一或兩個來盛放取得的 z升 水。

你允許:
裝滿任意一個水壺
清空任意一個水壺
從一個水壺向另外一個水壺倒水,直到裝滿或者倒空

示例 1: (From the famous “Die Hard” example)

輸入: x = 3, y = 5, z = 4
輸出: True

示例 2:

輸入: x = 2, y = 6, z = 5
輸出: False

程序說明:

由x和y得到的最小的z一定是x和y的最大公約數。例如4和6能得到2但是得不到1。判斷能不能用x和y得到某個數,就是判斷這個數是不是x和y的最大公約數的倍數。

可參考裴蜀定理。

代碼如下:

class Solution {
    public boolean canMeasureWater(int x, int y, int z) {
        if(x + y < z)
            return false;
        if(x + y == z || z == 0)
            return true;
        return z % gcd(x, y) == 0 ? true : false;
    }
    int gcd(int a, int b) {
        return b > 0 ? gcd(b, a % b) : a;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章