title | description | keywords | |||||||
---|---|---|---|---|---|---|---|---|---|
50. Pow(x, n) |
LeetCode 50. Pow(x, n)题解,Pow(x, n),包含解题思路、复杂度分析以及完整的 JavaScript 代码实现。 |
|
🟠 Medium 🔖 递归
数学
🔗 力扣
LeetCode
Implement pow(x, n), which
calculates x
raised to the power n
(i.e., xn
).
Example 1:
Input: x = 2.00000, n = 10
Output: 1024.00000
Example 2:
Input: x = 2.10000, n = 3
Output: 9.26100
Example 3:
Input: x = 2.00000, n = -2
Output: 0.25000
Explanation: 2-2 = 1/22 = 1/4 = 0.25
Constraints:
-100.0 < x < 100.0
-2^31 <= n <= 2^31-1
n
is an integer.- Either
x
is not zero orn > 0
. -10^4 <= xn <= 10^4
实现 pow(x, n) ,即计算 x 的 n 次幂函数。
直接循环相乘可能会超时,因为做了很多重复计算,可以使用二分法来避免重复计算。
- 用递归的方式,不断的将
n
二分下去,每次计算myPow(x, Math.floor(n / 2))
; - 注意
n
为负数时,要提前处理x
; - 注意
n
为奇数时,要手动多乘上一个被省略的x
;
- 时间复杂度:
O(log n)
- 空间复杂度:
O(1)
/**
* @param {number} x
* @param {number} n
* @return {number}
*/
var myPow = function (x, n) {
if (n == 0) return 1;
if (n == 1) return x;
if (n < 0) {
x = 1 / x;
n = -n;
}
let temp = myPow(x, Math.floor(n / 2));
if (n % 2 == 1) {
return temp * temp * x;
} else {
return temp * temp;
}
};
题号 | 标题 | 题解 | 标签 | 难度 | 力扣 |
---|---|---|---|---|---|
69 | x 的平方根 | [✓] | 数学 二分查找 |
🟢 | 🀄️ 🔗 |
372 | 超级次方 | 数学 分治 |
🟠 | 🀄️ 🔗 | |
2550 | 猴子碰撞的方法数 | 递归 数学 |
🟠 | 🀄️ 🔗 |