Algorithms first
Pow(x, n) · 交互式算法学习
计算 x 的整数次幂。
#50 · 数学
Pow(x, n)
Pow(x, n)
x = 2, n = 10静态推导静态讲解
快速幂
- 10 的二进制是 1010。n=10
- 底数依次平方为 2、4、16、256。squaring
- 只在二进制 1 位乘入,得到 1024。return 1024
推荐
快速幂
时间
O(log |n|)空间 O(1)按指数二进制位决定是否乘入答案,底数每轮平方。
1function myPow(x, n) {2 let p = BigInt(n),3 base = x,4 out = 1;5 if (p < 0) {6 base = 1 / base;7 p = -p8 }9 while (p) {10 if (p & 1n) out *= base;11 base *= base;12 p >>= 1n13 }14 return out;15}多语言参考
来源 · CC BY-SA 4.0 ↗Java · C++ · Go
这是一组同题正确实现,独立于上方当前动画方法;不同语言可能采用另一种正确策略。
1class Solution {2 public double myPow(double x, int n) {3 return n >= 0 ? qpow(x, n) : 1 / qpow(x, -(long) n);4 }5 6 private double qpow(double a, long n) {7 double ans = 1;8 for (; n > 0; n >>= 1) {9 if ((n & 1) == 1) {10 ans = ans * a;11 }12 a = a * a;13 }14 return ans;15 }16}交互式算法学习
从执行步骤真正理解 LeetCode 经典 150
本站整理 150 道高频算法面试题和 302 种解法。动画方法同步展示 JavaScript 与 Python;每题另提供 Java、C++ 与 Go 同题参考实现。
AlgoViz Lab
Pow(x, n) · 解法对比
计算 x 的整数次幂。
- 测试用例
x = 2, n = 10- 题目分类
- 数学
- 解法对比
- 2
重复相乘
把 x 连续乘 |n| 次,负指数最后取倒数。
- 时间
O(|n|)- 空间
O(1)
快速幂
按指数二进制位决定是否乘入答案,底数每轮平方。
- 时间
O(log |n|)- 空间
O(1)