思路:通過歸納,這題實際上是在求x和y的最大公因數是否能被z整除
兩數的最大公因數求法:輾轉相除法
大數模小數,餘數不爲0,則原來的小數變大數,餘數變小數,直到餘數爲0,此時的小數即爲最大公因數。(圖中相同顏色的數表示是從上一個式子中拿來的)
這裏再引入最小公倍數的計算方法:兩數之積/最大公因數
則本題的完整代碼爲:
class Solution:
def canMeasureWater(self, x: int, y: int, z: int) -> bool:
if z == 0:
return True
if x + y < z:
return False
if x < y: #總是把大數放在前面,不滿足的話就先交換一下
x, y = y,x
if y == 0: #如果小數等於0,那麼直接判斷大數是否等於z
return x == z
while x % y != 0: #求最大公因數
x, y= y, x % y
return z % y == 0