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