69. x 的平方根

69. x 的平方根

  • 原题链接:
  • 完成情况:
  • 解题思路:
  • 参考代码:
    • 1. log换底
    • 2. 二分查找
    • 3. 牛顿迭代法

原题链接:

69. x 的平方根

https://leetcode.cn/problems/sqrtx/description/

完成情况:

69. x 的平方根_第1张图片

解题思路:

  1. log换底
  2. 二分查找
  3. 牛顿迭代法

参考代码:

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;
	}
}

你可能感兴趣的:(算法知识,#,LeetCode题解,java学习,leetcode,windows,数据库,数据结构,算法)