程序检查给定列表是否在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