Description:
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 the decimal part is truncated, 2 is returned.
题意:模拟函数Sqrt(x)的功能,求一个数的开平方(取整数);
解法:Java中函数sqrt(x)所使用的原理是“牛顿迭代法”
xn+1=xn−f(xn)f′(xn)xn+1=xn−f(xn)f′(xn)
- 对于我们要求的数r的平方根x,有等式x2=rx2=r,即:f=x2−rf=x2−r
- 利用牛顿迭代法我们可以得到:xn+1=xn−f(xn)f′(xn)xn+1=xn−f(xn)f′(xn)xn+1=xn−x2−r2xxn+1=xn−x2−r2xxn+1=xn−12(x−r/x)xn+1=xn−12(x−r/x)xn+1=12(xn+r/x)xn+1=12(xn+r/x)
- 在迭代的开始阶段,x的值可以取r,迭代的结束条件是x2=rx2=r,因此这里我们使用了一个误差e−7e−7
class Solution {
public int mySqrt(int x) {
double err = 1e-7;
double result = x;
while(Math.abs(result - x/result) > err){
result = (result + x/result)/2.0;
}
return (int)result;
}
}