美文网首页
JS 笔试题——Pow(x, n)

JS 笔试题——Pow(x, n)

作者: 袭明_ | 来源:发表于2021-11-29 14:17 被阅读0次

题目:实现 pow(x, n) ,即计算 xn 次幂函数(即,xn)。

示例 1:

输入:x = 2, n = 10
输出:1024

示例 2:

输入:x = 2.1, n = 3
输出:9.261

示例 3:

输入:x = 2, n = -2
输出:0.25
解释:2^(-2) = 1/2^2 = 1/4 = 0.25

方法: 递归

分析:

x^n 可以分解为 x^{n/2} * x^{n / 2} ...

所以先找到x^{n / 2} 的结果再逐级返回结果。
但是n / 2时,需要处理奇偶两种情况:

  • n \%2 = 0: x^n = x^{n / 2} * x^{n / 2}
  • n \% 2 != 0: x^n = x^{n / 2} * x^{n / 2} * x

完整代码:

/**
 * @param {number} x
 * @param {number} n
 * @return {number}
 */
var myPow = function(x, n) {
    let m = n;
    return m >= 0 ? quickMul(x, m) : 1 / quickMul(x, -m);
};

var quickMul = function (x, m) {
    if (m === 0) {
        return 1;
    }
    let res = quickMul(x, Math.floor(m / 2));
    return m % 2 === 0 ? res * res : res * res * x;
}

复杂度分析

  • 时间复杂度:O(logn),即为递归的层数。
  • 空间复杂度:O(logn),即为递归的层数。这是由于递归的函数调用会使用栈空间。

相关文章

网友评论

      本文标题:JS 笔试题——Pow(x, n)

      本文链接:https://www.haomeiwen.com/subject/oyclxrtx.html