题目分析:求一个整数的平方根,如果此整数平方个不为整数,则返回其整数部分。
解题思路:方法一:利用牛顿迭代法实现。
具体:迭代公式为:x(i+1) = (x(i) + n / x(i)) / 2。计算过程中利用递归即可。
方法二:利用折半查找实现。
具体:每次取中间值n^2与x比价,若小于,则取右边的中间值再进行比较,若小于,则取左边中间
值再进行比较。
class Solution
{
public:
// 方法一:牛顿迭代法实现
int mySqrt(int x)
{
if(x < 0)
return -1;
if(x == 0)
return 0;
else
{
double x2 = 1;
double x1;
do
{
x1 = x2;
x2 = (x1 + x / x1) / 2;
}while(abs(x2 - x1) > 0.00001);
return (int)x2;
}
}
//方法二:利用折半查找
int mySqrt2(int x)
{
if(x < 0)
return -1;
if(x == 0)
return 0;
int first = 1;
int last = x / 2 + 1;
int mid;
while(first <= last)
{
mid = (first + last) / 2.0;
if(mid * mid == x )
return (int)mid;
if((x / mid >= mid) && ((mid + 1) > x / (mid + 1)))
return mid;
else if(x / mid < mid)
last = mid - 1;
else
first = mid + 1;
}
return -1;
}
};
下面是使用python实现的程序
class Solution:
def mySqrt(self, x):
if (x <= 1):
return x
n = x >> 1
first = 0
last = x
while first < last - 1:
s = n * n
if (s < x):
first = n
n += (last - first) >> 1
elif (s > x):
last = n
n -= (last - first) >> 1
else:
return n
return n if n * n <= x else n - 1