69. x 的平方根
- 原题链接:
- 完成情况:
- 解题思路:
- 参考代码:
- 1. log换底
- 2. 二分查找
- 3. 牛顿迭代法
原题链接:
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;}
}