1. 题目
2. 分析
因为是int类型的,如果平方刚好等于x,那直接返回,否则需要比较一下i 和 i+1 的平方,在之间就返回,注意一下i+1平方超过int类型的范围,需要long。
然后还有一个算法:牛顿法。
3. 代码
3.1 查询
public int mySqrt(int x) {
if (x < 2) {
return x;
}
for (int i = 1; i <= x / 2; i++) {
int i1 = i * i;
if (i1 == x) {
return i;
}
if (i * i < x && (long)(i + 1) * (i + 1) > x) {
return i;
}
}
return -1;
}
3.2 牛顿法
public int mySqrt(int a) {
if (a == 0 || a == 1) {
return a;
}
/** 牛顿法 x_n+1 = x_n - f(x)/f'(x) = x - (x^2 - a)/2x = x/2 + a/2x = (x + a/x)/2
* 此题中 f(x) = x^2 - a
*
*/
long xn = a;
while (xn*xn > a) {
xn = (xn + a/xn)/2;
}
return (int)xn;
}