题目:
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;
}
};

本文介绍如何使用二分法和牛顿法解决LeetCode上的求整数平方根问题,通过两种方法实现,提供了清晰的代码示例。
248

被折叠的 条评论
为什么被折叠?



