Leecode365. 水壶问题

简介: Leecode365. 水壶问题

题目描述:

有两个容量分别为 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

解题思路,由于这个题只需要判断是否能通过,不需要知道具体的过程,那么我们可以抽象的将其化成一个求两个数字的公约数问题。

同时要注意在求最大公约数的时候,gcd()方法内是不需要判断x,y的大小的,因为是递归调用,因此如果两个数是互质的,那么调用这个方法都是返回1,如果两个数不是互质的,那么无论x大还是y大,最终返回的都是x和y的最大公约数。

class Solution {
    public boolean canMeasureWater(int x, int y, int z) {
        if(x == 0 && y == 0) return z == 0;
        return (z % gcd(x,y) == 0 && x + y >= z);
    }
    static int gcd(int x,int y){
        if(y == 0) return x;
        int r = x % y;
        return gcd(y,r);
    }
}


相关文章
|
5月前
|
Java
每日一刷《剑指offer》字符串篇之左旋转字符串
每日一刷《剑指offer》字符串篇之左旋转字符串
51 0
每日一刷《剑指offer》字符串篇之左旋转字符串
|
5月前
面试题05-替换空格(LeeCode)
面试题05-替换空格(LeeCode)
30 0
Leecode 5. 最长回文子串
Leecode 5. 最长回文子串
41 1
Leecode 409. 最长回文串
Leecode 409. 最长回文串
38 0
Leecode 18. 四数之和
Leecode 18. 四数之和
48 0
|
存储
Leecode 面试题 17.16. 按摩师
Leecode 面试题 17.16. 按摩师
62 0
|
机器学习/深度学习
Leecode面试题64
Leecode面试题64
60 0