Fork me on GitHub

leetcode之69. x 的平方根

题目描述:

实现 int sqrt(int x) 函数。

计算并返回 x 的平方根,其中 x 是非负整数。

由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。

示例 1:

1
2
3
> 输入: 4
> 输出: 2
>

示例 2:

1
2
3
4
5
> 输入: 8
> 输出: 2
> 说明: 8 的平方根是 2.82842...,
> 由于返回类型是整数,小数部分将被舍去。
>

解题思路:

牛顿法求平方
一个数为x:
​ x1 = x / 2;
​ x2 = (x1 + x / x1) / 2;
​ x1 - x2 > 0.001
​ x3 = (x2 + x / x1) / 2;
​ x2 - x3 > 0.001时在循环
​ 一直到 < 0.001结束

时间复杂度: $O(n)$, 空间复杂度: $O(1)$.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution {
public:
int mySqrt(int x) {
if(x == 1 || x == 0)
return x;
double x1 = x,x2 = x / 2;

while(abs(x1 - x2) > 0.001)
{
x1 = x2;
x2 = (x1 + x / x1) / 2;

}
return (int)x2;
}
};