当z为GCD(x,y)的倍数时,返回True
裴蜀定理:
如果d为a,b的最大公约数,则存在整数x,y使得:ax+by=d
且d为最小的可以被写成ax+by的正数
其他可以被写成ax+by的整数都是d的倍数
当a或b为负数时,说明正在从一个杯子中倒出x杯子或y杯子的水
同理,如果a或b为正数时,说明正在向杯子中导入x杯子或y杯子的水。
例如:x=5, y=6, z=3
其中,z = 3GCD(x,y),因此可以成功
z = 3 * y - 3 * x
说明需要倒入3次6容量的杯子,倒出3次5容量的杯子
6容量杯子 | 5容量杯子 |
6 | 0 |
1 | 0 |
0 | 1 |
6 | 1 |
2 | 5 |
2 | 0 |
0 | 2 |
6 | 2 |
3 | 5 |
3 | 0 |
class Solution:
def canMeasureWater(self, x: int, y: int, z: int) -> bool:
if z > x + y:
return False
# 当x=0时,math.gcd(0, y) = y
return z == 0 or z % math.gcd(x, y) == 0