题目
题解(一)—牛顿法
class Solution {
public:
int mySqrt(int x) //牛顿法
{
long r=x;
while(r*r>x) r=(r+x/r)>>1;
return (int)r;
}
};
题解(二)—二分法
class Solution {
public:
int mySqrt(int x) {
long l = 0, h = (long)x + 1;
while(l < h)
{
long m = (l + h) / 2;
(m * m > x)&& (h = m);
(m * m <= x)&& (l = ++m);
}
return (int)l - 1;
}
};
题解(三)—递归法
class Solution {
public:
int mySqrt(int x) {
if(x<2) return x;
long left=mySqrt(x>>2)<<1;
long right=left+1;
return (right*right>x)?left:right;
}
};