leetcode:50. Pow(x, n)
题目
实现 pow(x, n)
,即计算 x
的 n
次幂函数(即,)。
示例:
输入:x = 2.00000, n = 10
输出:1024.00000
输入:x = 2.10000, n = 3
输出:9.26100
输入:x = 2.00000, n = -2
输出:0.25000
解释:2-2 = 1/22 = 1/4 = 0.25
解答 & 代码
快速幂(递归分治):
求,
- 如果 n 为偶数,则
- 如果 n 为奇数,则
递归结束条件:n == 1,则直接返回 x
class Solution {
private:
double calPow(double x, int n)
{
// 递归结束条件 1:如果 n == 0,则直接返回 1
if(n == 0)
return 1;
// 递归结束条件 2:如果 n == 1,则直接返回 x
if(n == 1)
return x;
double result = calPow(x, n / 2);
if(n % 2 == 0)
return result * result;
else
return result * result * x;
}
public:
double myPow(double x, int n) {
// 如果 n < 0,则 x 先转换为 1/x
if(n < 0)
x = 1 / x;
return calPow(x, n);
}
};
复杂度分析:设求 n 次幂
- 时间复杂度
:
- 空间复杂度
:递归深度(栈空间复杂度)
执行结果:
执行结果:通过
执行用时:0 ms, 在所有 C++ 提交中击败了 100.00% 的用户
内存消耗:5.7 MB, 在所有 C++ 提交中击败了 91.49% 的用户