【LeetCode】 365. Water and Jug Problem 水壶问题(Medium)(JAVA)每日一题

本文探讨了LeetCode上著名的水壶问题,通过数学方法判断是否能使用两个指定容量的水壶精确测量出目标容量的水。文章提供了Java代码实现,并通过实例演示了解决方案的有效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【LeetCode】 365. Water and Jug Problem 水壶问题(Medium)(JAVA)

题目地址: https://leetcode.com/problems/water-and-jug-problem/

题目描述:

You are given two jugs with capacities x and y litres. There is an infinite amount of water supply available. You need to determine whether it is possible to measure exactly z litres using these two jugs.

If z liters of water is measurable, you must have z liters of water contained within one or both buckets by the end.

Operations allowed:

Fill any of the jugs completely with water.
Empty any of the jugs.
Pour water from one jug into another till the other jug is completely full or the first jug itself is empty.

Example 1: (From the famous “Die Hard” example)

Input: x = 3, y = 5, z = 4
Output: True

Example 2:

Input: x = 2, y = 6, z = 5
Output: False

题目大意

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

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

解题方法

1、根据最小公倍数可知: ax + by = cz,所以只要求出最小公倍数即可
2、最后请用以上水壶中的一或两个来盛放取得的 z升 水,所以 x + y >= z

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

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

执行用时 : 0 ms, 在所有 Java 提交中击败了 100.00% 的用户
内存消耗 : 36.2 MB, 在所有 Java 提交中击败了 13.93% 的用户

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值