Python程式檢查給定列表中是否存在勾股數三元組
假設我們有一個名為nums的數字列表,我們需要檢查是否存在三個數字a、b和c,使得a^2 + b^2 = c^2。
因此,如果輸入類似於[10, 2, 8, 5, 6],則輸出將為True,因為8^2 + 6^2 = 64+36 = 100 = 10^2。
為了解決這個問題,我們將遵循以下步驟:
- tmp := nums中所有數字的平方值組成的降序列表
- 對於tmp中的每個索引i和對應的數字n,執行以下操作:
- base := n
- left := i+1, right := tmp的大小 - 1
- 當left <= right時,執行以下操作:
- t := 將tmp[left]和tmp[right]兩個列表合併
- 如果t等於base,則
- 返回True
- 否則,如果t > base,則
- left := left + 1
- 否則,
- right := right - 1
- 返回False
讓我們看看以下實現以獲得更好的理解:
示例
class Solution: def solve(self, nums): tmp = sorted([n*n for n in nums], reverse = True) for i, n in enumerate(tmp): base = n left = i+1; right = len(tmp)-1 while left <= right: t = tmp[left]+tmp[right] if t == base: return True elif t > base: left += 1 else: right -= 1 return False ob = Solution() print(ob.solve([10, 2, 8, 5, 6]))
輸入
[10, 2, 8, 5, 6]
輸出
True
廣告