题目:
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.
问题解析:
求给定整数x的平方根。
链接:
思路标签:
算法:二分法
解答:
1. 二分法
- 使用二分法在
1~x
的范围内进行查找; - 虽然题目简单,但是需要注意的边界范围,以及mid的赋值方式需要考虑;
class Solution {
public:
int mySqrt(int x) {
if (0 == x) return 0;
int left = 1, right = x, ans;
while (left <= right) {
int mid = left + (right - left) / 2; //mid为在原来的基础上+一半
if (mid <= x / mid) {
left = mid + 1;
ans = mid;
} else {
right = mid - 1;
}
}
return ans;
}
};
2. 牛顿法
- 直接利用牛顿法求解。
- 具体解释自行Google。
class Solution {
public:
int mySqrt(int x) {
long r = x;
while (r*r > x)
r = (r + x/r) / 2;
return r;
}
};