如何判断三个无序数字是否构成Pythagorean triple(勾股数)
无需预排序判断勾股三元组的实现方案
核心逻辑非常简单,不需要对三个输入数做排序操作,仅需利用勾股三元组的定义:三个数中一定存在一个数的平方等于剩余两个数的平方和,直接对所有可能的情况做判断即可,实现成本和计算开销都远低于预排序的方案。
实现方案1:枚举所有斜边可能
三个输入数最多只有3种斜边可能,直接枚举所有情况判断即可:
def pythagorean(a, b, c): # 预先计算平方避免重复计算 sq_a = a * a sq_b = b * b sq_c = c * c # 分别判断三个数作为斜边的场景 return sq_a + sq_b == sq_c or sq_a + sq_c == sq_b or sq_b + sq_c == sq_a
实现方案2:取最大值计算(写法更简洁)
不用排序也可以直接拿到三个数的最大值,用三个数的平方总和减去最大值平方得到另外两数的平方和,直接对比即可:
def pythagorean(a, b, c): sq_a, sq_b, sq_c = a*a, b*b, c*c max_sq = max(sq_a, sq_b, sq_c) return max_sq == sq_a + sq_b + sq_c - max_sq
如果需要严格校验输入为正整数的勾股数,可以增加入参校验逻辑:
def pythagorean(a, b, c): # 校验为正整数 if not (isinstance(a, int) and isinstance(b, int) and isinstance(c, int)) or a <=0 or b <=0 or c <=0: return False sq_a, sq_b, sq_c = a*a, b*b, c*c max_sq = max(sq_a, sq_b, sq_c) return max_sq == sq_a + sq_b + sq_c - max_sq
测试效果
pythagorean(3, 4, 5)返回Truepythagorean(5, 3, 4)返回Truepythagorean(4, 3, 6)返回False
内容的提问来源于stack exchange,提问作者royan maeri
相关产品推荐
相关产品推荐

