给定非负整数c 求是否有a的平方加b的平方等于c
class Solution {
public boolean find(int c ) {
int a = 0, b = mySqrt(c);
//c直接开方完成 那就肯定存在两个数 一个是 0 另一个是求出来的b
if(b*b==c) return true;
while( a < c) {
int tmp = c - a*a;
b = mySqrt(tmp);
if(b*b==tmp) return true;
a++;//缓慢逼近 不错过每一次机会 a虽然小 但求出来的b大也是一样
}
return false;
}
//袖珍计算器算法 求平方根
public int mySqrt(int x) {
if(x==0) return 0;
int ans = (int)Math.exp(0.5*Math.log(x));
return (long)(ans+1)*(ans+1) <= x ?(ans+1):ans;
}
}
网友评论