69. Sqrt(x)
Implement int sqrt(int x)
.
Compute and return the square root of x.
此题同367题不同之处在于,此题徐哟求出sqrt(x)的值,而367题则不需要,367只用简单的判断是不是有个数的平方等于整数x
方法一、二分查找法
int mySqrt(int x) {
if(0 == x)
return x;
int low = 1;
int high = x;
while(true)
{
int mid = low + (high - low)/2;
if(mid > x / mid) //注意:如果写成:mid * mid > x则有可能超出范围,导致超时的错误
high = mid - 1;
else
{
if((mid + 1) > x / (mid + 1)) //同上述注意事项一样
return mid;
low = mid + 1;
}
}
}
方法二、牛顿迭代法---还不是很懂
int sqrt(int x) {
double ans = x;
double delta = 0.0001;
while (fabs(pow(ans, 2) - x) > delta) {
ans = (ans + x / ans) / 2;
}
return ans;
}
方法三、分治法
https://discuss.leetcode.com/topic/2671/share-my-o-log-n-solution-using-bit-manipulation