LeetCode-365-水壶问题

有两个容量分别为 x升 和 y升 的水壶以及无限多的水。请判断能否通过使用这两个水壶,从而可以得到恰好 z升 的水?

如果可以,最后请用以上水壶中的一或两个来盛放取得的 z升 水。

你允许:

装满任意一个水壶
清空任意一个水壶
从一个水壶向另外一个水壶倒水,直到装满或者倒空

官方给出的递归方式不太赞成,具体解释可以看官方,感觉还是考数学知识,贝祖定理。可以构建ax+by=z。找到x y的最大公约数,再看z是否为其倍数。

    public boolean canMeasureWater(int x, int y, int z) {
        if(z == 0){
            return true;
        }
        if(z > x + y)
            return false;
        int result = 1;
        if(x < y){
            int tmp = x;
            x = y;
            y = tmp;
        }
        while (true){
            if(y == 0){
                result = x;
                break;
            }
            int tmp = x % y;
            x = y;
            y = tmp;

        }
        if(result == 0)
            return false;
        return (z % result) == 0 ? true : false;
    }

最无语的居然有当其中任意个水壶容量(x,y)为0。不能装水还叫水壶么?咋不说还有复数呢?搞笑的数据测试。。。

猜你喜欢

转载自blog.csdn.net/lfanchenyu/article/details/105896368