leetCode69. x 的平方根
题目描述
/**
* 实现 int sqrt(int x) 函数。
*
* 计算并返回 x 的平方根,其中 x 是非负整数。
*
* 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
*
*/
思路分析
- 实现开平方函数,可以使用函数替换法,即将x的二分之一次方用其他函数替换
- 系统自带的函数执行速度特别快
- 源码替换如下
- 也可以考虑使用二分法,根据每次二分中间值的平方和要开平方的数的大小关系判断下一次二分从区间
- 直到找到满足的数为止
源码及分析
/**
*
* @param x 要开平方的数字
* @return 返回计算的结果
*/
public int mySqrt(int x) {
//判断x是否为0
if (x == 0){
return 0;
}
//使用数学函数替换法,将根号用其他函数形式替换
//根号x = e 的 (二分之一 以e为底x的对数) 次方
//exp函数求 e 的多少次方
//log函数求 以e为底 x 的对数
int res = (int)Math.exp(0.5 * Math.log(x));
return (long)(res + 1) * (res + 1) <= x ? (res + 1) : res;
}