leetcode365:水壺問題與最大公因數,最小公倍數

在這裏插入圖片描述
思路:通過歸納,這題實際上是在求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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章