方法一:二分查找,通过设置起始位置为0,结束位置为x,使用二分查找, 当中间的值小于目标值时更新输出值(大于一定不是)。
class Solution {
public:
int mySqrt(int x) {
int start = 0;
int end = x;
int mid = 0;
int result = 0;
while(start<=end)
{
mid = (start+end)/2;
if((long long)mid*mid>x)
{
mid-=1;
end = mid;
}
else if((long long)mid*mid<x)
{
result = mid;
mid+=1;
start =mid;
}
else if(mid*mid==x)
return mid;
}
return result;
}
};
方法二:
数学法,算算术平方根的数学意义。
class Solution {
public:
int mySqrt(int x) {
if (x == 0) {
return 0;
}
int ans = exp(0.5 * log(x));
return ((long long)(ans + 1) * (ans + 1) <= x ? ans + 1 : ans);
}
};