Leetcode 69. x 的平方根(二分法、牛顿法)

Description

实现 int sqrt(int x) 函数。

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

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

示例 1:

输入: 4
输出: 2
示例 2:

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

Solution1 二分法

参考:Leetcode解析

class Solution:
    def low_bound(self, value, left, right):
        while left < right:
            mid = (left + right+1) >> 1  # 右中位点
            if mid * mid > value:  # 排除中位数条件
                # left = mid + 1
                right = mid - 1
            else:
                left = mid
        return left

    def mySqrt(self, x: int):
        if x == 0:
            return 0
        ans = self.low_bound(x, 0, 50000)
        return ans

Solution2 牛顿法

参考:牛顿法
相当于解方程:n已知解 x 2 = n x^2 = n x2=n x 2 − n = 0 x^2-n=0 x2n=0的零点,由于牛顿法迭代公式有: x n + 1 = x n − x n 2 − n 2 ∗ x n x_{n+1} = x_n - \frac{x_n^2-n}{2*x_n} xn+1=xn2xnxn2n

class Solution:
    def mySqrt(self, x: int) -> int:
        cur, pre = 1, 1
        while True:
            cur = pre - (pre*pre - x)/(2*pre)
            if abs(cur - pre) < 1e-6:
                return int(cur)
            else:
                pre = cur

你可能感兴趣的:(LeetCode,算法----二分三分)