69. x 的平方根
Posted jesseywang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了69. x 的平方根相关的知识,希望对你有一定的参考价值。
题目描述: 实现 int sqrt(int x)函数。
计算并返回x的平方根,其中x是非负整数。 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
示例 1:
输入: 4
输出: 2
示例 2:
输入: 8
输出: 2
说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。
- 常规解法:需要注意细节
//C int mySqrt(int x){ if(x == 1) return 1; //注意res和i的类型,在计算过程中,res的值可能超出int范围而需要注意类型转换,使用i也应该是long long类型 long long i; long long res; for(i = 1; i <= x / 2 + 1; i++){ res = i * i; if(res > x) break; } return i - 1; } //JS var mySqrt = function(x) { if(x == 1) return 1; for(let i = 1; i <= Math.floor(x / 2) + 1; i++){ if(i * i > x) return i - 1; } };
- 二分查找:
//C int mySqrt(int x) { //注:在中间过程计算平方的时候可能出现溢出,所以用long long。 long long i=0; long long j=x/2+1;//对于一个非负数n,它的平方根不会大于(n/2+1) while(i<=j) { long long mid=(i+j)/2; long long res=mid*mid; if(res==x) return mid; else if(res<x) i=mid+1; else j=mid-1; } return j; } //JS var mySqrt = function(x) { if(x == 0 || x == 1) return x; let i = 0, j = Math.floor(x / 2) + 1, mid = 0, tmp = 0; while(i <= j){ mid = Math.floor((i + j) / 2); tmp = mid * mid; if(tmp == x) return mid; else if(tmp < x) i = mid + 1; else j = mid - 1; } return j; };
- 牛顿迭代法: 待理解:
//C int mySqrt(int x) { if (x == 0) return 0; double last=0; double res=1; while(res!=last) { last=res; res=(res+x/res)/2; } return int(res); }
以上是关于69. x 的平方根的主要内容,如果未能解决你的问题,请参考以下文章