//方法一:利用二分搜索法来做
//Time:O(log(n)),Space:O(1)
class Solution
{
public:
int mySqrt(int x)
{
int begin=0;
int end=x;
while(begin<=end)
{
long mid=begin+((end-begin)>>1);
long mid2=mid*mid;
if(mid2>x)
{
end=mid-1;
}
else if(mid2<x)
{
begin=mid+1;
}
else
{
return mid;
}
}
return (int)end;
}
};
//方法二,牛顿迭代法,牛顿迭代法是一种求解方程根的通用解法
//Time:O(log(n)),Space:O(1)
class Solution
{
public:
int mySqrt(int x)
{
long n=x;
while(n*n>x)
{
n=(n+x/n)/2;
}
return (int)n;
}
};