用 Python 检查给定列表是否包含勾股数的程序

pythonserver side programmingprogramming更新于 2026/1/12 16:44:17

假设我们有一个名为 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

相关文章


有用资源