Skip to content

Latest commit

 

History

History
103 lines (76 loc) · 2.13 KB

69-sqrtx.md

File metadata and controls

103 lines (76 loc) · 2.13 KB

69. Sqrt(x) - x 的平方根

实现 int sqrt(int x) 函数。

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

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

示例 1:

输入: 4
输出: 2

示例 2:

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

题目标签:Math / Binary Search

题目链接:LeetCode / LeetCode中国

题解

牛顿法求f(x)=0的根:

x = x - f(x)/f'(x)

对于sqrt(n),也就是求f(x)=x^2-n=0的根。

Language Runtime Memory
java 1 ms 32.2 MB
class Solution {
    public int mySqrt(int x) {
        int l = 0;
        int r = x;
        while (l < r) {
            int mid = (int)(l + r + 1l) >> 1;
            if (mid <= x / mid) l = mid;
            else r = mid - 1;
        }
        return l;
    }
}
Language Runtime Memory
cpp 4 ms 8.3 MB
class Solution {
public:
    int mySqrt(int x) {
        // sqrt(x) = y  ->  x = y^2
        int left = 0;
        int right = x;
        while (left < right) {
            int mid = left + (right - left + 1ll) / 2;
            if (mid > x / mid) right = mid - 1;
            else left = mid;
        }
        return left;
    }
};
Language Runtime Memory
python3 56 ms N/A
class Solution:
    def mySqrt(self, x):
        """
        :type x: int
        :rtype: int
        """
        pre = 1
        while True:
            res = 0.5 * (pre + x / pre)
            if abs(res - pre) < 1:
                break
            pre = res
        return int(res)