美文网首页
LeetCode 69. Sqrt(x)

LeetCode 69. Sqrt(x)

作者: 洛丽塔的云裳 | 来源:发表于2020-04-12 21:41 被阅读0次

0. 题目

Implement int sqrt(int x).
Compute and return the square root of x, where x is guaranteed to be a non-negative integer.
Since the return type is an integer, the decimal digits are truncated and only the integer part of the result is returned.

Example 1:
Input: 4
Output: 2

Example 2:
Input: 8
Output: 2
Explanation: The square root of 8 is 2.82842..., and since
the decimal part is truncated, 2 is returned.

1. c++版本

方法1,暴力法,将<x的所有平方计算出来,然后取最接近x的数字

    int mySqrt(int x) {
        double prev, curr, i;
        for (i=0; i<= x; i++){
            curr = i*i;
            if (curr == x)
                return i;
            else if (prev < x && x < curr) {
                return i-1;
            }
            else if (curr < x)
                prev = curr;
        }
        return i;
    }

改进版本: 可以对比x与(x/2)^2,从而大幅缩小遍历的范围

  int mySqrt(int x) {
        double prev, curr, first=0, last=0, i, mid;
        mid = x/2;
        while (mid) {
            curr = mid * mid;
            if (x <= curr) {
                last = int(mid);
            }
            if (x > curr) {
                first = int(mid);
                break;
            }
            mid /= 2;
        }
        for (i = int(first); i <= int(last); ++i) {
            curr = i*i;
            if (curr == x)
                return i;
            if (prev < x && curr > x)
                return i-1;
            if (curr < x)
                prev = curr;
        }
        return i;
    }

优化版本:牛顿法,todo!

2. python版本

 def mySqrt(self, x):
        """
        :type x: int
        :rtype: int
        """
        first, last, prev, curr, mid = 0, 0, 0, 0, 0
        mid = x/2
        while mid:
            curr = mid * mid
            if x <= curr:
                last = int(mid)
            if x > curr:
                first = int(mid)
                break
            mid /= 2

        i = first
        while i <= last:
            curr = i * i
            if curr == x:
                return i
            if curr < x:
                prev = curr
            if prev < x and x < curr:
                return i-1
            i = i + 1
        return i

相关文章

网友评论

      本文标题:LeetCode 69. Sqrt(x)

      本文链接:https://www.haomeiwen.com/subject/linbmhtx.html