美文网首页
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