LeetCode第69题:x的平方根(简单)

LeetCode第69题:x的平方根(简单)

  • 题目:实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
  • 思路一:呃。。。这样做有点过分了2333
class Solution {
    public int mySqrt(int x) {
        int ans = (int)Math.sqrt(x);
        return ans;
    }
}

在这里插入图片描述

  • 思路二:刚开始时while中没有对ans的值进行限制,但是溢出了。ans最大可以达到46340,所以对它进行了限制。
class Solution {
    public int mySqrt(int x) {
        int ans=0;
        while(ans*ans<=x && ans<=46340){
            ans++;
        }
        return ans-1;
    }
}

在这里插入图片描述

  • 思路三:二分法。
class Solution {
  public int mySqrt(int x) {
    if (x < 2) return x;

    long num;
    int pivot, left = 2, right = x / 2;
    while (left <= right) {
      pivot = left + (right - left) / 2;
      num = (long)pivot * pivot;
      if (num > x) right = pivot - 1;
      else if (num < x) left = pivot + 1;
      else return pivot;
    }

    return right;
  }
}

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

在这里插入图片描述

  • 思路四:没想到这道题还有这么多想法。可以利用递归。
    在这里插入图片描述
class Solution {
  public int mySqrt(int x) {
    if (x < 2) return x;

    int left = mySqrt(x >> 2) << 1;
    int right = left + 1;
    return (long)right * right > x ? left : right;
  }
}

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

在这里插入图片描述

  • 思路五:牛顿法。
class Solution {
  public int mySqrt(int x) {
    if (x < 2) return x;

    double x0 = x;
    double x1 = (x0 + x / x0) / 2.0;
    while (Math.abs(x0 - x1) >= 1) {
      x0 = x1;
      x1 = (x0 + x / x0) / 2.0;
    }

    return (int)x1;
  }
}

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

在这里插入图片描述

发布了79 篇原创文章 · 获赞 7 · 访问量 1370

猜你喜欢

转载自blog.csdn.net/new_whiter/article/details/104392467