要求
给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c 。
示例 1:
输入:c = 5
输出:true
解释:1 * 1 + 2 * 2 = 5
示例 2:
输入:c = 3
输出:false
示例 3:
输入:c = 4
输出:true
示例 4:
输入:c = 2
输出:true
示例 5:
输入:c = 1
输出:true
提示:
- 0 <= c <= 231 - 1
核心代码
class Solution:
def judgeSquareSum(self, c: int) -> bool:
begin,end = 0,int(math.sqrt(c))
while begin <= end:
if begin ** 2 + end ** 2 >c:
end -= 1
elif begin ** 2 + end ** 2 < c:
begin += 1
else:
return True
return False
另一解法
class Solution:
def judgeSquareSum(self, c: int) -> bool:
if c == 0:
return True
for i in range(int(c ** 0.5) + 1):
num = c - i * i
if int(num ** 0.5) == num ** 0.5:
return True
return False
第三种解法
class Solution:
def judgeSquareSum(self, c: int) -> bool:
if not c:
return True
k = int(math.sqrt(c))
l = int(math.sqrt(c // 2))
for i in range(k,l - 1,-1):
m = math.sqrt(c - i * i)
if int(m) == m:
return True
return False
解题思路:第一种解法:我们使用左右指针的方式,和超过减小右边,和没超过增大左边,和刚好则此数是平方数之和;第二种解法:直接使用int的方法进行判断数的开方是否相同,思路比较简单;第三种解法:在第二种解法的基础上限定了范围,免去了无用的循环,效率更高。