【LeetCode】69. Sqrt(x) 解题记录
问题描述
Given a non-negative integer x, compute and return the square root of x.
Since the return type is an integer, the decimal digits are truncated, and only the integer part of the result is returned.
测试样例
1 | Input: x = 4 |
1 | Input: x = 8 |
说明
1 | 0 <= x <= 2^31 - 1 |
解题
思路
对 [0, x]
区间使用二分法求解。
为了防止除以 0
,把 x = 0
的情况单独考虑,然后对区间 [1, a]
进行二分查找。
补充:
-
二分法
-
时间复杂度
O(lg(n))
-
还有一种更快的算法 —— 牛顿迭代法,其公式为 x_{n+1} = x_n - f(x_n) / f^'(x_n)。给定 ,这里的迭代公式为 ,其代码如下。
1
2
3
4
5
6
7
8
9
10class Solution {
public int mySqrt(int x) {
long a = x;
while (a * a > x) {
a = (a + x / a) / 2;
}
return (new Long(a)).intValue();
}
}为了防止
int
超上界,使用long
来存储乘法结果
代码
1 | class Solution { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 哆啦 C 梦!
评论