思路1:暴力解法,在枚举a的同时根据求平方根方法sqrt求出b,若b是整数则返回ture,若不为整数,则继续枚举a;
注:暴力枚举也可以减少一些枚举的次数,a枚举a的范围为 a^2 < sqrt(c)
Java实现:
class Solution {
public boolean judgeSquareSum(int c) {
for(long a = 0;a * a <= c;a++){
double b = Math.sqrt(c - a * a);//根据整数a和整数c求出b
if(b == (int)b){//若b为整数则返回true
return true;
}
}
return false;
}
}
思路二:根据双指针来解,设定a <= b <= sqrt(c)
若 a^2 + b^2 == c 则return true;
若 a^2 + b^2 < c 则a++;
若 a^2 + b^2 > c 则b--;
class Solution {
public boolean judgeSquareSum(int c) {
long a = 0;//左指针
long b = (long)Math.sqrt(c);//右指针
while(a <= b){
int sum = a * a + b * b
if(sum == c){
return true;
}else if(sum < c){
a++;
}else {
b--;
}
}
return false;
}
}