x的平方根
x的平方根
一、题目描述
给一个非负整数x。计算并返回x的平方根。返回结果是整数,结果只保留整数部分,小数部分被舍去。
注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。
二、题目分析
将x开平方并保留整数返回。k*k= x,求k。
三、解题思路
方法一
可以通过数学的方法!

代码实现:
public int mySqrt(int x) {
if (x == 0) {
return 0;
}
int ans = (int) Math.exp(0.5 * Math.log(x));
return (long) (ans + 1) * (ans + 1) <= x ? ans + 1 : ans;
}
方法二
通过二分法查找到k,找到中间值。mid = l + (n-l)/2而不用(l+n)/2是为了防止x=1时。
代码实现:
public int mySqrt(int x) {
int l=0;
int n=x;
int ans = -1;
while(l<=n){
int mid = l+(n-l)/2;
if((long) mid * mid > x ){
n = mid-1;
}else{
l = mid+1;
ans = mid;
}
}
return ans;
}
浙公网安备 33010602011771号