题目
给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c。
思路
把c视为一个以0,0为原点的圆,从1开始遍历到根号n,如果能找出另外一个整数的和相加等于c,那么就返回true,否则返回false。
代码
//平方数之和,判断c是否能拆成 两个数的平方的和
class Solution {
public boolean judgeSquareSum(int c) {
int n=(int)Math.sqrt(c*1.0);
int temp=0;
for (int i=1;i<n;++i)
{
temp=(int)Math.sqrt(c-i*i);
if (i*i+temp*temp==c)
return true;
}
return false;
}
}
结果
就暴力循环一遍,没什么算法可言。题解的代码更加简单。。
public 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;
}
}