这道题如果挨个算的话就超时了,所以用二分法.
sqrt(x) 当x>4时,都小于x/2, 但所有都小于x/2+1.
(x/2)^2有可能超过int范围,因此,要么用一个long变量,要么比较mid和x/mid
代码如下:
public class Solution {
public int sqrt(int x) {
if(x<0) return -1;
if(x==0) return 0;
int half = x/2+1;
int start = 1, end = half;
while(start<=end){
int mid = (start+end)/2;
int rest = x/mid;
//long tmp = mid*mid;
if(mid > rest) end = mid-1;
else if(mid < rest) start = mid+1;
else return mid;
}
return end;
}
}
http://fisherlei.blogspot.com/2013/01/leetcode-sqrtx.html
上面的链接里还有一个牛顿迭代解法,但是太偏数学了,就不写代码了.
应该时刻记住, 当挨个调查耗时太多时,就应该考虑二分法了!