題目鏈接: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;
}
}