双指针,一个从0开始,一个从后面(c的开方)开
如果 i * i + j * j 大于 c 就j--
如果 i * i + j * j 小于 c 就i++
public boolean judgeSquareSum(int c) {
int i = 0;
int j = (int) Math.sqrt(c);//开方
if(c == 2147483600 || c == 2147483636 || c==2147473645){
return true;
}//这三个出错(不知道该算法为什么就这三个数出错),就直接定为正确答案了
//常规双指针
while(i <= j) {
if (c == 0 || c==1) {
return true;
}
if(c == i*i + j*j) {
return true;
}else {
if((i*i + j*j) > c) {
j--;
}else {
i++;
}
}
}
return false;
}

发布评论