【leetcode】365.水壶问题
题目描述:
有两个容量分别为 x升 和 y升 的水壶以及无限多的水。请判断能否通过使用这两个水壶,从而可以得到恰好 z升 的水?
如果可以,最后请用以上水壶中的一或两个来盛放取得的 z升 水。
你允许:
- 装满任意一个水壶
- 清空任意一个水壶
- 从一个水壶向另外一个水壶倒水,直到装满或者倒空
解题思路:
两个水壶的可能量出的水是两个水壶容量最大公约数的倍数,此外需要判断z是否大于两个水壶的最大容量,以及x和y是否有0。
具体代码:
1 class Solution { 2 public boolean canMeasureWater(int x, int y, int z) { 3 if(x == 0 || y == 0) 4 return z == x || z == y; 5 int t = gcd(x, y); 6 return z % t == 0 && (x + y >= z); 7 8 } 9 private int gcd(int a, int b){ 10 return b == 0 ? a : gcd(b, a % b); 11 } 12 }