正确代码
class Solution {
public boolean judgeSquareSum(int c) {
long left = 0;
long right = (long) Math.sqrt(c);
while (left <= right) {
long sum = left * left + right * right;
if (sum == c) {
return true;
} else if (sum > c) {
right--;
} else {
left++;
}
}
return false;
}
}
错误代码复盘:
1. 使用双指针进行遍历左值最小应该为0( 当c = 4 时候不能通过)
2. 由于是平方和等于c,右值应该最大为c的开根号(当c>99999999时候不能通过,越界)
3. 应该用long类型,暂时不明白原因(当c=2147483600 不能通过)
错误代码如下,
class Solution {
public boolean judgeSquareSum(int c) {
int a = 1;
int b = c;
while(a<=b){
if(c==(a*a+b*b))
return true;
else if(c<(a*a+b*b))
b--;
else if(c>(a*a+b*b))
a++;
}
return false;
}
}