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

1.深度搜索
Python解答:

2.最大公约数
Python解答:

class Solution:
    def canMeasureWater(self, jug1Capacity: int, jug2Capacity: int, targetCapacity: int) -> bool:
        def gcd(a, b):
            a, b = max(a, b), min(a, b)
            if b == 0:
                return a
            return gcd(b, a-b)
        mcd = gcd(jug1Capacity, jug2Capacity)
        if targetCapacity % mcd == 0 and jug1Capacity+jug2Capacity >= targetCapacity:
            return True
        else:
            return False
最后修改日期: 2021年10月7日

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。