题目三十九:
实现 int sqrt(int x)
函数,计算并返回 x 的平方根。
样例
sqrt(3) = 1
sqrt(4) = 2
sqrt(5) = 2
sqrt(10) = 3
挑战
O(log(x))
代码:
class Solution {
public:
/**
* @param x: An integer
* @return: The sqrt of x
*/
int sqrt(int x) {
// write your code here
long long int i=2,j,flag=0;
if(x==0)
return 0;
else if(x==1)
return 1;
while(1)
{
if(i*i<x)
{
if(flag==0)
{
j=i;
i=i*i;
}
else
i++;
}
if(i*i>x&&flag==0)
{
i=j;
flag=1;
}
if(i*i<x&&(i+1)*(i+1)>x)
return i;
if(i*i==x)
return i;
}
}
};
思路:减少时间消耗,在i*i<x时
用flag和j记录i的值,i=i*i,如果出现i*i>x则i=j,让i的值返回到前一个i的值,同时更改flag,此后i=i+1;直到出现
i*i<x&&(i+1)*(i+1)>x或
i*i==x为止。
由于有i=i*i存在,所以减少了时间的消耗,之前逐个遍历导致时间超出限制,这是我想出的处理方法。但是要注意i*i可能超出int的范围,所以i定义为long long int型变量。