题目描述
题目描述
实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。
示例 1:
输入:x = 2.00000, n = 10
输出:1024.00000
示例 2:
输入:x = 2.10000, n = 3
输出:9.26100
示例 3:
输入:x = 2.00000, n = -2
输出:0.25000
解释:2^-2 = (1/2)^2 = 1/4 = 0.25
提示:
-100.0 < x < 100.0-2^31 <= n <= 2^31-1-10^4 <= x^n <= 10^4
解题思路
- 暴力计算:我们通过循环 n 次得到 n 次方的乘积
- 分而治之:因为暴力计算过程中我们重复计算了很多不必要的值,因此,我们可以考虑把计算过程拆解成一个个子过程
题解
- 暴力解法(计算超时)
var myPow = function (x, n) {
let ans = 1;
let factor = n >= 0 ? x : (1 / x);
for (let i = 0; i < Math.abs(n); i++) {
ans *= factor;
}
return ans;
};
- 分治解法
var myPow = function (x, n) {
if (n === 0) return 1;
if (n < 0) return 1 / myPow(x, -n);
if (n % 2 === 1) return x * myPow(x, n - 1);
return myPow(x * x, n / 2);
};
总结
当一个计算过程可能包含许多重复的计算步骤,我们通常可以通过缓存或者分而治之的思想来减少重复计算的部分。