LeetCode 50 Pow(x, n)[快速幂 递归 迭代] HERODING的LeetCode之路
Posted HERODING23
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 50 Pow(x, n)[快速幂 递归 迭代] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。
解题思路:
解决该题不能用常规的幂函数的思路,即 xn = x * x * x * … x,而是换一个思路,比如28,可以为24 * 2,24 也是同理,这样递归的方式实现,注意N可能为负数,所以在返回时要讨论,代码如下:
class Solution
public:
double quickPow(double x, long long N)
if(N == 0)
return 1.0;
double y = quickPow(x, N / 2);
return N % 2 == 0 ? y * y : y * y * x;
double myPow(double x, int n)
long long N = n;
return N >= 0 ? quickPow(x, N) : 1.0 / quickPow(x, -N);
;
迭代的方式也是相同的道理,并且不像递归的方式占用太多的栈空间,但是他不能像递归那样直接倒着来,即递归到N为0的时候才开始计算,迭代的方式是从N乘性减的时候就要进行计算了,所以要考虑奇数情况下x的贡献度,即多乘的x会在之后的迭代中不断翻倍,所以在迭代的时候也要翻倍,代码如下:
class Solution
public:
double quickPow(double x, long long N)
double ans = 1.0;
double contribute = x;
while(N > 0)
if(N % 2 == 1)
ans *= contribute;
contribute *= contribute;
N /= 2;
return ans;
double myPow(double x, int n)
long long N = n;
return N >= 0 ? quickPow(x, N) : 1.0 / quickPow(x, -N);
;
时间复杂度:O(logn)
空间复杂度:O(1)
以上是关于LeetCode 50 Pow(x, n)[快速幂 递归 迭代] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 50. Pow(x, n)(快速幂,Java)