程序检查给定列表是否在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:=以num降序排列的所有数字的平方的列表

  • 对于每个索引i和tmp中对应的数字n,执行

    • t:=加入两个列表tmp [left]和tmp [right]

    • 如果t与基数相同,则

    • 否则当t> base时

    • 除此以外,

    • 返回True

    • 左:=左+1

    • 右:=右-1

    • 基数:= n

    • 左:= i + 1,右:= tmp -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
    猜你喜欢