- 思路:二分法,递归求解,递归出口为(midmid>x&&midmid<x+1)解释一下,因为题目要求返回一个整数,所以在mid的平方在x~x+1处就行,如果mid*mid>x 说明 x的平方根肯定在left ~mid之间,反之则在mid ~ right 之间;
public int mySqrt(int x) {
return sqrt(x,1,x);
}
public int sqrt(int x,double a,double b)
{
double mid=(a+b)/2;
if(mid*mid>x&&mid*mid<x+1)
return (int)mid;
if(mid*mid>x)
return sqrt(x,a,mid);
if(mid*mid<x)
return sqrt(x,mid,b);
return (int)mid;
}
第二种思路:牛顿的迭代法
public int mySqrt(int x) {
long r = x;
while (r * r > x) r = (r + x / r) / 2;
return (int) r;
}