二分法即可
class Solution {
public int mySqrt(int x) {
if(x==1)
{
return 1;
}
long left=1;
long right=x/2;
while (left<=right)
{
long mid=(left+right)/2;
if(x==mid*mid)
{
return (int)mid;
}
else if(x>mid*mid)
{
left=mid+1;
}
else
{
right=mid-1;
}
}
return (int)left-1;
}
}
还有牛顿法,看看就行,属于数学方法了
class Solution {
public:
int mySqrt(int x) {
if (x == 0) return 0;
double res = 1, pre = 0;
while (abs(res - pre) > 1e-6) {
pre = res;
res = (res + x / res) / 2;
}
return int(res);
}
};