Algorithms first

Pow(x, n) · 交互式算法学习

计算 x 的整数次幂。

#50 · 数学

Pow(x, n)

Pow(x, n)

测试用例x = 2, n = 10
静态推导静态讲解
无需动画

快速幂

  1. 10 的二进制是 1010。n=10
  2. 底数依次平方为 2、4、16、256。squaring
  3. 只在二进制 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}
多语言参考

Java · C++ · Go

来源 · CC BY-SA 4.0 ↗

这是一组同题正确实现,独立于上方当前动画方法;不同语言可能采用另一种正确策略。

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 同题参考实现。

多形态可视化数组、矩阵、DP 表、递归树、树图、链表、栈队列堆、区间和状态机按解法选择。
动画与代码同步当前状态、步骤说明、变量和代码高亮保持一一对应,可逐步播放和回退。
适合面试复习每种方案都给出思路、时间复杂度、空间复杂度、测试用例和 LeetCode 中文原题入口。
AlgoViz Lab

Pow(x, n) · 解法对比

计算 x 的整数次幂。

测试用例
x = 2, n = 10
题目分类
数学
解法对比
2
方案 1

重复相乘

把 x 连续乘 |n| 次,负指数最后取倒数。

时间
O(|n|)
空间
O(1)
方案 2

快速幂

按指数二进制位决定是否乘入答案,底数每轮平方。

时间
O(log |n|)
空间
O(1)