codeTop100题(42)69. x 的平方根

84 阅读1分钟

1. 题目

69. x 的平方根 

2. 分析

因为是int类型的,如果平方刚好等于x,那直接返回,否则需要比较一下i 和 i+1 的平方,在之间就返回,注意一下i+1平方超过int类型的范围,需要long。

然后还有一个算法:牛顿法。

3. 代码

3.1 查询

public int mySqrt(int x) {
    if (x < 2) {
        return x;
    }

    for (int i = 1; i <= x / 2; i++) {
        int i1 = i * i;
        if (i1 == x) {
            return i;
        }
        if (i * i < x && (long)(i + 1) * (i + 1) > x) {
            return i;
        }
    }
    return -1;
}

3.2 牛顿法

public int mySqrt(int a) {
        if (a == 0 || a == 1) {
            return a;
        }
        /**  牛顿法 x_n+1 = x_n - f(x)/f'(x) = x - (x^2 - a)/2x = x/2 + a/2x = (x + a/x)/2
         *     此题中 f(x) = x^2 - a
         *
         */

        long xn = a;
        while (xn*xn > a) {
            xn = (xn + a/xn)/2;
        }

        return (int)xn;
    }