题目:实现int sqrt(int x)函数。计算并返回x的平方根,其中x是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
    例:

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

    题解:
    一、暴力法:袖珍计算器法

    
    class Solution:
        def mySqrt(self, x: int) -> int:
            if x == 0:
                return 0
            ans = int(math.exp(0.5 * math.log(x)))
            return ans + 1 if (ans + 1) ** 2 <= x else ans
    
    作者:LeetCode-Solution
    链接:https://leetcode-cn.com/problems/sqrtx/solution/x-de-ping-fang-gen-by-leetcode-solution/
    来源:力扣(LeetCode)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    

    曲线救国策略,利用恒等式No.69 x的平方根 - 图1计算即可。最后由于浮点数运算存在误差,需要验证边界情况。
    由于log的计算是通过查找对数表完成的,因此时间复杂度为No.69 x的平方根 - 图2

    二、二分查找

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

    在0到x之间的有序整数列中查找符合条件的值。
    知识点:
    二分查找
    使用二分查找的先决条件是,根据题意建模一个从有序数组中查找符合条件的元素的过程。

    三、牛顿法

    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)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    

    知识点:
    牛顿法
    牛顿法,一种通过迭代快速求解函数近似零点的算法。以本题为例,求解No.69 x的平方根 - 图3相当于求解No.69 x的平方根 - 图4
    迭代的过程如图所示,No.69 x的平方根 - 图5会快速逼近真正的零点No.69 x的平方根 - 图6,当前后两次迭代的变化非常小时,可以认为已经非常接近正解,停止迭代。
    No.69 x的平方根 - 图7