平方根

题目描述:实现 int sqrt(int x) 函数。

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

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

示例 :

输入: 8

输出: 2

说明: 8 的平方根是 2.82842...,由于返回类型是整数,小数部分将被舍去。

代码

二分法:(注意选取右侧的中位数)

public class Solution {

    public int mySqrt(int x) {

        if (x == 0) {

            return 0;

        }

        // 注意:针对特殊测试用例,例如 2147395599

        // 要把搜索的范围设置成长整型

        long left = 1;

        long right = x / 2;

        while (left < right) {

            // 注意:这里一定取右中位数,如果取左中位数,代码会进入死循环

            // long mid = left + (right - left + 1) / 2;

            long mid = (left + right + 1) >>> 1;

            long square = mid * mid;

            if (square > x) {

                right = mid - 1;

            } else {

                left = mid;

            }

        }

        // 因为一定存在,因此无需后处理

        return (int) left;

    }

}

牛顿法:知乎大神

class Solution:

    def mySqrt(self, x):

        if x < 0:

            raise Exception('不能输入负数')

        if x == 0:

            return 0

        # 起始的时候在 1 ,这可以比较随意设置

        cur = 1

        while True:

            pre = cur

            cur = (cur + x / cur) / 2

            if abs(cur - pre) < 1e-6:

                return int(cur)

作者:liweiwei1419

链接:https://leetcode-cn.com/problems/sqrtx/solution/er-fen-cha-zhao-niu-dun-fa-python-dai-ma-by-liweiw/

来源:力扣(LeetCode)

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的:(平方根)