69. Sqrt(x)
Difficulty: Easy
Implement int sqrt(int x)
.
Compute and return the square root of x, where x is guaranteed to be a non-negative integer.
Since the return type is an integer, the decimal digits are truncated and only the integer part of the result is returned.
Example 1:
Input: 4
Output: 2
Example 2:
Input: 8
Output: 2
Explanation: The square root of 8 is 2.82842..., and since
the decimal part is truncated, 2 is returned.
Solution
思路1
二分法,代码如下:
Language: C++
class Solution {
public:
int mySqrt(int x) {
if (x == 0 || x == 1) return x;
long left = 0, right = x, mid = 0, res = 0;
while (left <= right) {
mid = (left + right) / 2;
if (mid == x / mid) {
return (int)mid;
} else if (mid > x / mid) {
right = mid - 1;
} else {
left = mid + 1;
res = mid;
}
}
return res;
}
};
思路2
牛顿迭代法,题目很简短,就是让写一个开方函数。
知乎有个帖子,里面有大神说得很通俗,这里贴出链接——
如何通俗易懂地讲解牛顿迭代法求开方? - 知乎https://www.zhihu.com/question/20690553
class Solution {
public:
int mySqrt(int x) {
long r = x;
while (r * r > x) {
r = (r + x / r) / 2;
}
return r;
}
};