实现 int sqrt(int x) 函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
示例 1:
输入: 4
输出: 2
示例 2:
输入: 8
输出: 2
说明: 8 的平方根是 2.82842…, 由于返回类型是整数,小数部分将被舍去。
解法一:
使用二分查找,取左右两个数的中间值作为游标去寻找最接近的平方根数,当左边的数大于右边的数时,返回右边的数减1当有小数点的话向下取整
// 2018/11/18 上午
var mySqrt = function(x) {
var lo=0,hi=x,mid;
while(lo<=hi){
mid=Math.ceil((lo+hi)/2)
// console.log(lo,hi,mid,mid*mid)
if(mid*mid==x) return mid;
if(mid*mid<x){
lo=mid+1
}else{
hi=mid-1;
}
}
return Math.floor(hi);
};
1017 / 1017 个通过测试用例
执行用时:96 ms
解法二:
从1开始累加找平方根,当大于目标值的时候,就返回当前数减1
var mySqrt = function(x) {
var square,status=0;
for(var i=1;i<=x/i;i++){
square=i*i
if(square==x) return i;
if(status==0 && square*square<x){
i=i*i;continue;
}
status=1;
}
return i<1? 0:i-1;
};
1017 / 1017 个通过测试用例
执行用时:164 ms