LeetCode 69. x 的平方根

简介: LeetCode 69. x 的平方根

69. x 的平方根


https://leetcode-cn.com/problems/sqrtx/solution/x-de-ping-fang-gen-by-leetcode-solution/


实现 int sqrt(int x) 函数。


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


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


示例 1:


输入: 4
输出: 2


示例 2:


输入: 8
输出: 2


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


题解


方法一:牛顿迭代法


下面这种方法可以很有效地求出根号 aa 的近似值:首先随便猜一个近似值 xx,然后不断令 xx 等于 xx 和 a/xa/x 的平均数,迭代个六七次后 xx 的值就已经相当精确了。


例如,我想求根号 22 等于多少。假如我猜测的结果为 44,虽然错的离谱,但你可以看到使用牛顿迭代法后这个值很快就趋近于根号 22 了:


( 4 + 2/ 4 ) / 2 = 2.25


( 2.25 + 2/ 2.25 ) / 2 = 1.56944…


( 1.56944…+ 2/1.56944…) / 2 = 1.42189…


( 1.42189…+ 2/1.42189…) / 2 = 1.41423…


….


如果所示:




代码


(ps:一开始不要脸的写了个math中的 sqrt函数 看了大佬写的题解,感觉几年数学白学 T^T)


class Solution {
public:
    int s;
    int mySqrt(int x) {
        s=x;
        if(x==0) 
            return 0;
        return ((int)(Sqrt(x)));
    }
    double Sqrt(double x){
        double res=(x+s/x)/2;
        if(res==x)
            return x;
        else
            return Sqrt(res);
    }
};


简写:


int mySqrt(int a) {
  long x = a;
  while (x * x > a) {
    x = (x + a / x) / 2;
  }
  return x;
}


方法二:二分法



int mySqrt(int a) {
  if (a == 0) 
    return a;
  int l = 1, r = a, mid, sqrt;
  while (l <= r) {
    mid = l + (r - l) / 2;
    sqrt = a / mid;
    if (sqrt == mid) {
      return mid;
    } else if (mid > sqrt) {
      r = mid - 1;
    } else {
      l = mid + 1;
    } 
  }
  return r;
}


相关文章
|
11天前
【力扣】69. x 的平方根
【力扣】69. x 的平方根
|
7月前
|
存储
leetcode:69. x 的平方根
利用二分查找思想,在0与x区间进行查找。 设置左边界 left (初始值为0),右边界 right(初始值为x)和中值 mid (值为区间的中间值),同时设置一个ans(初始值为-1)作为最终返回值。
46 0
YI
|
9月前
|
Go
LeetCode 0069. X的平方根【Go】
LeetCode 0069. X的平方根【Go】
YI
61 0
|
11月前
力扣69x的平方根
力扣69x的平方根
39 0
|
前端开发 Go 对象存储
【刷力扣 TS 版】难度 简单,x 的平方根 & 验证回文串
【刷力扣 TS 版】难度 简单,x 的平方根 & 验证回文串
【刷力扣 TS 版】难度 简单,x 的平方根 & 验证回文串
|
前端开发 算法 JavaScript
LeetCode 未知数的平方根使用JavaScript解题|前端学算法
LeetCode 未知数的平方根使用JavaScript解题|前端学算法
108 0
LeetCode 未知数的平方根使用JavaScript解题|前端学算法
|
算法 Serverless
LeetCode 67二进制求和&68文本左右对齐&69x的平方根
给你两个二进制字符串,返回它们的和(用二进制表示)。
170 0
LeetCode 67二进制求和&68文本左右对齐&69x的平方根
怒刷力扣(x的平方根)
X的平方根,看到这个题的第一感觉就是倒推,使用平方的形式。但是最关键还是要想到二分法来计算这个过程。
76 0
怒刷力扣(x的平方根)