實現 pow(x, n) 函數,計算 x 的 n 次方。n 為 32 位有符號整數,需處理負指數情況。暴力循環 O(n) 會超時,必須使用 O(log n) 的快速冪算法。
利用指數運算性質:x^n = (x^(n/2))^2(n 為偶數),x^n = x * (x^(n/2))^2(n 為奇數)。每次將指數減半,遞歸深度 log n。
class Solution {
public:
double myPow(double x, long long n) {
if (n == 0) return 1.0;
if (n < 0) return 1.0 / myPow(x, -n);
double half = myPow(x, n / 2);
return (n % 2 == 0) ? half * half : half * half * x;
}
};
class Solution {
public:
double myPow(double x, long long n) {
if (n < 0) { x = 1 / x; n = -n; }
double res = 1.0;
while (n > 0) {
if (n & 1) res *= x;
x *= x;
n >>= 1;
}
return res;
}
};
n = -2147483648 時,-n 會溢出。解決方案:使用 long long 類型接收 n,或特殊處理 n == INT_MIN。
快速冪思想廣泛應用於矩陣冪、模冪運算(如 RSA 加密)、幾何級數求和等問題。掌握其遞歸與迭代雙重實現是算法面試必備技能。