leetcode【每日一题】水壶问题 Java

题干

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

想法

要不dfs 要么有一个数学定理…
参考即可
今天刚做完蓝桥杯
思路官方说的很清楚,
因为其他的状态都可等效
即两杯水不可能同时没装满
根绝定理直接找最大公约数就做出来了

Java代码

package daily;

public class CanMeasureWater {
    public boolean canMeasureWater(int x, int y, int z) {
        if(x==0||y==0){
            return  x+y==z||z==0;
        }
        if(x+y<z){
            return  false;
        }
        return  z%gcd(x,y)==0;


    }
    public   static int gcd(int a,int b){
        return b==0?a:gcd(b,a%b);
    }

    public  static  void main(String[] args){
        CanMeasureWater canMeasureWater=new CanMeasureWater();
        System.out.println(canMeasureWater.canMeasureWater(3,5,4));
    }
}

我的leetcode代码已经上传到我的git

发布了180 篇原创文章 · 获赞 0 · 访问量 3786

猜你喜欢

转载自blog.csdn.net/qq_43491066/article/details/105011756