LeetCode 50. Pow(x, n) | 刷题打卡

377 阅读1分钟

题目描述

本题选自 LeetCode 50. Pow(x, n)

题目描述

实现 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);
};

总结

当一个计算过程可能包含许多重复的计算步骤,我们通常可以通过缓存或者分而治之的思想来减少重复计算的部分。

前期回顾

Leetcode303 区域和检索 | 刷题打卡

LeetCode 组合总和三连 | 刷题打卡

LeetCode 703 数据流中的第 K 大元素 | 刷题打卡

LeetCode 239 滑动窗口最大值 | 刷题打卡

LeetCode 242 有效的字母异位词 | 刷题打卡

LeetCode 15 三数之和 | 刷题打卡

LeetCode 98 验证二叉搜索树 | 刷题打卡