2021-11-20 求平方根 LeetCode 69

题目

给你一个非负整数 x ,计算并返回 x 的 算术平方根 。

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

注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。

示例 1:

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

输入:x = 8
输出:2
解释:8 的算术平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。

提示:

0 <= x <= 231 - 1

题解一:牛顿法

牛顿迭代法 - 知乎 (zhihu.com)
如何通俗地解释泰勒公式? - 知乎 (zhihu.com)
sqrt函数实现(神奇的算法)_小白成小黑-CSDN博客_sqrt函数

class Solution:
    def mySqrt(self, x: int) -> int:
        val = x
        while abs(x - val ** 2) > 0.1:
            val = (val + x / val) / 2       
        return int(val)

官方的牛顿法

class Solution:
    def mySqrt(self, x: int) -> int:
        if x == 0:
            return 0
        
        C, x0 = float(x), float(x)
        while True:
            xi = 0.5 * (x0 + C / x0)
            if abs(x0 - xi) < 1e-7:
                break
            x0 = xi
        
        return int(x0)

作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/sqrtx/solution/x-de-ping-fang-gen-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

题解二:二分法

class Solution:  # 【李煜东大神太强了】
    def mySqrt(self, x: int) -> int:
        l, r = 0, x
        while l < r:
            mid = (l + r + 1) // 2
            if mid ** 2 <= x:
                l = mid
            else:
                r = mid - 1
        return l

官方题解:x 的平方根 - Sqrt(x) - 力扣(LeetCode) (leetcode-cn.com)

class Solution:
    def mySqrt(self, x: int) -> int:
        l, r, ans = 0, x, -1
        while l <= r:
            mid = (l + r) // 2
            if mid * mid <= x:
                ans = mid
                l = mid + 1
            else:
                r = mid - 1
        return ans
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容