难度:【中等】
给定一个非负整数 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
解题思路:
双指针;先计算出某个平方数最接近目标数值的整数max。接着在[0,max]区间内使用双指针思路进行平方数之和的计算,同样与目标值进行比较从而确定左右两侧的指针如何移动。
代码实现:
class Solution {
public boolean judgeSquareSum(int c) {
if (c <= 2) {
return true;
}
long low = 0,high = (int)Math.sqrt(c);;
while (low <= high) {
long square = low * low + high * high;
if (square == c) {
return true;
} else if (square < c) {
low++;
} else {
high--;
}
}
return false;
}
}