题目:实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
示例 1:输入: 4。输出: 2
示例 2:输入: 8。输出: 2说明: 8 的平方根是 2.82842...;由于返回类型是整数,小数部分将被舍去。
思路:
方法一:二分法。注意:将首和尾指针都设置为long型的,直到return时才将其转化为int型。
方法二:牛顿迭代法: 根据牛顿迭代的原理,可以得到计算sqrt(n)的迭代公式:X(n+1)=[X(n)+p/Xn]/2
源码:GitHub源码
方法一:
class Solution {
public int mySqrt(int x) {
long low = 0;
long high = x;
while(low<=high){
long mid = (low + high)/2;
if(mid*mid < x)
low = mid + 1;
else if(mid*mid > x)
high = mid - 1;
else
return (int)mid;
}
return (int)high;
}
}
方法二:
class Solution {
public int mySqrt(int a) {
long x = a;
while (x * x > a) {
x = (x + a / x) / 2;
}
return (int) x;
}
}