Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Pow(x, n)-50 #25

Open
sl1673495 opened this issue May 10, 2020 · 0 comments
Open

Pow(x, n)-50 #25

sl1673495 opened this issue May 10, 2020 · 0 comments
Labels
二分查找 复习 * 1 复习了一遍的题目

Comments

@sl1673495
Copy link
Owner

sl1673495 commented May 10, 2020

  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;
};
@sl1673495 sl1673495 added 二分查找 复习 * 1 复习了一遍的题目 labels May 10, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
二分查找 复习 * 1 复习了一遍的题目
Projects
None yet
Development

No branches or pull requests

1 participant