一. 题目
-
题目
实现 pow(x, n) ,即计算 x 的 n 次幂函数。 -
示例
二. 方法一:
-
解题思路
x^n = (e^ln(x))^n = e^(n*ln(x))
-
解题代码
public double myPow(double x, int n) { int flag = 1; if(x < 0 && n % 2 == 1) { flag = -1; } x = Math.abs(x); // x^n = (e^ln(x))^n = e^(n*ln(x)) return flag * Math.exp(Math.log(x) * n); }
-
分析
三. 方法二: 快速幂 + 递归
-
解题思路
-
解题代码
public double myPow(double x, int n) { long N = n; if(N > 0) { return quickMul(x, N); } else { return 1.0 / quickMul(x, -N); } } public double quickMul(double x, long n){ if(n == 0){ return 1; } double res = quickMul(x, n / 2); if(n % 2 == 0){ return res * res; } else { return res * res * x; } }
-
分析
时间复杂度: O(logn)
空间复杂度: O(logn)