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

 

posted @ 2019-03-03 16:43  李怕怕  阅读(1087)  评论(0编辑  收藏  举报