剑指 Offer 16. 数值的整数次方
作者:互联网
-
思路:递归+快速幂
-
何为快速幂?
-
例如x11,普通的求法是x不断自乘,时间复杂度O(n)
-
这里采用快速幂:指数11转化为二进制1101,也就是不断除以2。
时间复杂度降为O( logn )
-
-
当要计算xn时,先递归计算xn/2,n/2向下取整
-
n再分奇偶,奇数:为xn = y2 * x;偶数:xn = y2
-
边界情况:n为0,return 1
-
-
代码:
class Solution { public: double myPow(double x, int n) { //边界 if( n == 0 ) return 1; //n为负数,取倒数 if( n == -1 ) return 1/x; //奇数 if( n & 1 ) return x * myPow( x*x, n >> 1 ); //偶数 return myPow( x*x, n >> 1 ); } };
标签:myPow,xn,Offer,double,复杂度,16,次方,return,y2 来源: https://www.cnblogs.com/chenglixue/p/16415725.html