Sqrt(x)
Total Accepted: 11664 Total Submissions: 54437 My Submissions
Implement int sqrt(int x).
Compute and return the square root of x.
解法1:
调用Java API,Math.sqrt()。这个方法的底层实现是native。
1)、搜索0到x/2+1即可。
2)、两数相乘有可能越界,声明值为long型。
Total Accepted: 11664 Total Submissions: 54437 My Submissions
Implement int sqrt(int x).
Compute and return the square root of x.
解法1:
调用Java API,Math.sqrt()。这个方法的底层实现是native。
Java AC
public class Solution {
public int sqrt(int x) {
return (int)Math.sqrt(x);
}
}
解法2:
二分搜索,无限逼近。注意2点:
1)、搜索0到x/2+1即可。
2)、两数相乘有可能越界,声明值为long型。
Java AC
public class Solution {
public int sqrt(int x) {
long low = 0;
long high = x / 2 + 1;
while(low <= high){
long mid = (low + high) >> 1;
long tempNum = mid * mid;
if(tempNum == x){
return (int)mid;
}
if(tempNum > x){
high = mid - 1;
}else{
low = mid + 1;
}
}
return (int)high;
}
}
解法3:
牛顿迭代法求开方
假设f(x)是关于x的函数,如图所示:
在Xn处的斜率为:
求得:
根据
得到递推公式:
Java AC
public class Solution {
public int sqrt(int x) {
double result = x;
while(Math.abs(result * result - x) > 0.0001){
result = (result + x / result) / 2;
}
return (int)result;
}
}