
思路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;
}
}
文章讲述了两种方法解决Java中的整数平方和问题:暴力枚举结合求平方根,以及利用双指针策略。暴力枚举减少了部分计算,而双指针则通过动态调整a和b来寻找满足条件的整数对。
438

被折叠的 条评论
为什么被折叠?



