今天题目简单直接上代码
package com.myproject.demo.算法;
/**
* 实现 pow(x, n) ,即计算 x 的 n 次幂函数。
* <p>
* 示例 1:
* <p>
* 输入: 2.00000, 10
* 输出: 1024.00000
* <p>
* 示例 2:
* <p>
* 输入: 2.10000, 3
* 输出: 9.26100
* <p>
* 示例 3:
* <p>
* 输入: 2.00000, -2
* 输出: 0.25000
* 解释: 2-2 = 1/22 = 1/4 = 0.25
* <p>
* 说明:
* <p>
* -100.0 < x < 100.0
* n 是 32 位有符号整数,其数值范围是 [−231, 231 − 1] 。
* <p>
* 来源:力扣(LeetCode)
* 链接:https://leetcode-cn.com/problems/powx-n
* 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
*
* @author yuJie
* @since 2020/5/11
*/
public class 幂函数 {
/**
* 二分 O(logn)
*
* @param x
* @param n
* @return
*/
public static double myPow(double x, int n) {
double result = 递归二分(x, Math.abs(n));
if (n < 0) {
return 1 / result;
} else {
return result;
}
}
/**
* 会超时
*
* @param x
* @param n
* @return
*/
public static double 递归二分(double x, int n) {
if (x == 0) {
return 0;
}
if (n == 0) {
return 1;
}
if (n == 1) {
return x;
}
double v = 递归二分(x, n / 2);
if (n % 2 == 0) {
return v * v;
} else {
return v * v * x;
}
}
public static double myPow2(double x, int n) {
if (x == 0) {
return 0;
}
if (n == 0) {
return 1;
}
int i = 1;
while (i<n) {
}
return 1;
}
/**
* 循环,O(n)
*
* @param x
* @param n
* @return
*/
public static double myPow1(double x, int n) {
double result = 1;
for (int i = 0; i < Math.abs(n); i++) {
result = result * x;
}
if (n < 0) {
return 1 / result;
}
return result;
}
public static void main(String[] args) {
System.out.println(myPow(0.00001, 2147483647));
}
}