实现 int sqrt(int x)
函数,计算并返回 x 的平方根
样例
sqrt(3) = 1
sqrt(4) = 2
sqrt(5) = 2
sqrt(10) = 3
O(log(x))
我的代码:注意平方值可能会超过int,故使用long long
class Solution {
public:
/**
* @param x: An integer
* @return: The sqrt of x
*/
int sqrt(int x) {
// write your code here
return search(0,x,x);
}
int search(int s, int n, int x)
{
long long t = (s + n)/2;
long long tt = t*t;
if(tt > (long long)x)
return search(s, t, x);
if(tt < x)
{
for(long long i=t; i<=n; i++)
{
long long ii = i * i;
if(ii > (long long)x)
return (int)i-1;
if(ii == (long long)x)
return (int)i;
}
}
if(tt == (long long)x)
return (int)t;
}
};
更好的二分算法,参见:http://blog.csdn.net/wutingyehe/article/details/46648991