思路
求平方根的方法主要有二分法和数学上的迭代法,迭代公式An+1 = (An+x/An)/2
二分法
注意细节
class Solution {
public:
int mySqrt(int x) {
if(x<=1)
return x;
int le = 0;
int ri = x/2+1;
int mid = ri-(ri-le)/2;
while(le+1<ri)
{
mid = ri-(ri-le)/2;
if(mid==x/mid)
return mid;
if(mid<x/mid)
{
le = mid+1;
}
else ri = mid;
}
if(le>x/le)
return le-1;
return le;
}
};
牛顿迭代法
class Solution {
public:
int mySqrt(int x) {
if(x<=1)
return x;
long temp = 1;
long xx = x;
long ans = (temp+xx/temp)/2;
while(ans>xx/ans)
{
ans = (temp+xx/temp)/2;
temp = ans;
}
return ans;
}
};
库函数
class Solution {
public:
int mySqrt(int x) {
return int(sqrt(x));
}
};