题目描述: 给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,c 等于 a 和 b 的平方和。
示例:
输入: 5
输出: True
解释: 1 * 1 + 2 * 2 = 5
解法一: 利用双指针的思想,需要注意两个坑点,一个是 a 可能等于 b ,第二个是 a 和 b 可能为 0 。b 的起始位置为 Math.sqrt(c)
。
public boolean judgeSquareSum(int c) {
int a = 0, b = (int)Math.sqrt(c);
while(a <= b){
int ans = a * a + b * b;
if(ans == c){
return true;
}else if(ans > c){
b--;
}else if(ans < c){
a++;
}
}
return false;
}
解法二: 用根号替换搜索结果的方法。
public boolean judgeSquareSum(int c) {
for (long a = 0; a * a <= c; a++) {
double b = Math.sqrt(c - a * a);
if (b == (int) b) return true;
}
return false;
}