水壶问题(python)完整版

import math
class Solution:
    def canMeasureWater(self, x: int, y: int, z: int) -> bool:
        #这里我们排除需要得到0升水的情况和恰好有一个壶的容量跟目标一致的情况
        if z == 0 or z == x or z == y  :  
            return True 
        #判断是否超出最大量取容量,超过了就取不到了,应为只有两个壶
        if z > x + y :
            return False
        #这里用到了math库中的最小公约数方法gcd,如果z是最小公约的整数倍关系的时候,就可以取到
        return z % math.gcd(x,y) == 0
solution = Solution()
print(solution.canMeasureWater(3, 5, 4))  # 示例调用,期望输出为 True 或 False

主要逻辑如下:

如果目标容量 z 是 0 或者恰好等于其中一个水壶的容量,那么无论如何都可以得到目标容量,因此返回 True。
如果目标容量 z 大于两个水壶的容量之和,那么无论如何都无法得到目标容量,因为只有两个水壶,无法增加水量。因此返回 False。
如果 z 是水壶容量 x 和 y 的最大公约数的倍数,那么可以通过倒水的操作得到目标容量 z。因为每次倒水操作都是增加或减少最大公约数的水量,所以只要 z 是最大公约数的倍数,就可以通过一系列操作得到 z。因此返回 z % math.gcd(x, y) == 0。

参考链接

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值