题目描述:
实现 int sqrt(int x) 函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
示例 1:
输入: 4
输出: 2
示例 2:
输入: 8
输出: 2
说明: 8 的平方根是 2.82842…,
由于返回类型是整数,小数部分将被舍去。
在真实的面试中遇到过这道题?
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sqrtx
暴力破解:
class Solution {
public int mySqrt(int x) {
long a = 0;
while (a * a <= x) {
a++;
}
return (int) a - 1;
}
}
二分查找:
class Solution {
public int mySqrt(int x) {
return (int)sqrt(1,x,x);
}
private long sqrt(long left,long right,long x) {
if(right<left) return right;
long mid = left+(right-left)/2;
if(mid*mid<x) return sqrt(mid+1,right,x);
if(mid*mid>x) return sqrt(left,mid-1,x);
else return mid;
}
}
牛顿迭代,来源题解:
class Solution {
int y;
public int mySqrt(int x) {
y =x;
if(x==0) return 0;
return (int)sqrt(x);
}
private double sqrt(double x) {
double res = (x+y/x)/2;
if(res==x) return res;
else {
return sqrt(res);
}
}
}