69. x 的平方根
原题链接:
69. x 的平方根
https://leetcode.cn/problems/sqrtx/description/
完成情况:
解题思路:
- log换底
- 二分查找
- 牛顿迭代法
参考代码:
1. log换底
package 日常Java程序测试.代码随想录.数组;
public class __69x的平方根__log换底 {
/**
*
* @param x
* @return
*/
public int mySqrt(int x) {
//结果只保留 整数部分 ,小数部分将被 舍去 。
if(x == 0){
return 0;
}
int res = (int) Math.exp(0.5 * Math.log(x));
return (long)(res + 1) * (res + 1) <= x ? res + 1 :res;
}
}
2. 二分查找
package 日常Java程序测试.代码随想录.数组;
public class __69x的平方根__二分查找 {
/**
*
* @param x
* @return
*/
public int mySqrt(int x) {
int left = 0,right = x,res = -1;
while (left <= right){
int mid = left + (right - left) / 2;
if ((long)mid * mid <= x){
res = mid;
left = mid + 1;
}else {
right = mid - 1;
}
}
return res;
}
}
3. 牛顿迭代法
package 日常Java程序测试.代码随想录.数组;
public class __69x的平方根__牛顿迭代法 {
/**
*
* @param x
* @return
*/
public int mySqrt(int x) {
if (x == 0){
return 0;
}
double C = x,x0 = x;
while (true){
double x_i = 0.5 * (x0 + C / x0);
if (Math.abs(x0 - x_i) < 1e-7){
break;
}
x0 = x_i;
}
return (int) x0;
}
}