LeetCode-Sqrt(x)

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)所使用的原理是“牛顿迭代法”

x n + 1 = x n f ( x n ) f ( x n )

  1. 对于我们要求的数r的平方根x,有等式 x 2 = r ,即:
    f = x 2 r
  2. 利用牛顿迭代法我们可以得到:
    x n + 1 = x n f ( x n ) f ( x n )
    x n + 1 = x n x 2 r 2 x
    x n + 1 = x n 1 2 ( x r / x )
    x n + 1 = 1 2 ( x n + r / x )
  3. 在迭代的开始阶段,x的值可以取r,迭代的结束条件是 x 2 = r ,因此这里我们使用了一个误差 e 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;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_24133491/article/details/80918247