sl1673495 / leetcode-javascript

:beers: 喝杯小酒,一起做题。前端攻城狮从零入门算法的宝藏题库,根据知名算法老师的经验总结了 100+ 道 LeetCode 力扣的经典题型 JavaScript 题解和思路。已按题目类型分 label,一起加油。
2.08k stars 344 forks source link

Pow(x, n)-50 #25

Open sl1673495 opened 4 years ago

sl1673495 commented 4 years ago
  1. Pow(x, n)

实现 pow(x, n) ,即计算 x 的 n 次幂函数。

https://leetcode-cn.com/problems/powx-n

思路

这题的第一反应是一步步去用x * x暴力计算,但是这种解法会超时。

所以用一种快速幂计算的方式,也就是把 x 的 n 次方转化为 x * x 的 n / 2 次方。

比如求 2 的 10 次方可以转为 4 的 5 次方,这时候遇到奇数次方了,就转化为 4* (4 的 4 次方)。

然后对于 4 的 4 次方,再进一步转化为 16 的 2 次方,最后转为 256 的 1 次方 * 4,就得出最终解 1024。

/**
 * @param {number} x
 * @param {number} n
 * @return {number}
 */
var myPow = function (x, n) {
  if (n === 0) return 1;
  if (n === 1) return x;
  let abs = Math.abs(n);
  let isMinus = abs !== n;

  let res = abs % 2 === 0 ? myPow(x * x, abs / 2) : x * myPow(x, abs - 1);
  return isMinus ? 1 / res : res;
};