633. 平方数之和
注意:在运算时可能会发生int型溢出,计算时要使用long
(一)双指针
class Solution {
public boolean judgeSquareSum(int c) {
long i=0;
long j=(long) Math.sqrt(c);
//可能会出现i*i+j*j>2^31-1的情况,所以先赋值给一个long,再进行比较
long sum=0;
while(i<=j) {
sum = i*i+j*j;
if (sum<c)
i++;
else if(sum>c)
j--;
else
return true;
}
return false;
}
}
(二)使用sqrt函数
在枚举a的同时,用sqrt函数找出b
class Solution {
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;
}
}