Implement pow(x, n).
题意:计算x的次方
思路:这题的思路和sqrt的类似,向二分靠近。例如求4^5,我们可以这样求:res=4、4*4^4。就是将每次在res的基础上乘以x本身,换成,每次以x*=x的方式前行,这样时间复杂度为O(logn),代码如下:
1 class Solution { 2 public: 3 double pow(double x, int n) 4 { 5 double res=1.0; 6 for(int i=n;i !=0;i/=2) 7 { 8 if(i%2 !=0) 9 res*=x; 10 x*=x; 11 } 12 return n<0?1/res:res; 13 } 14 };
把x的n次方划分成两个x的n/2次方相乘,然后递归求解子问题,结束条件是n为0返回1。代码:
1 class Solution { 2 public: 3 double pow(double x, int n) 4 { 5 if(n==0) return 1; 6 double half=pow(x,n/2); 7 if(n%2==0) 8 return half*half; 9 else if(n>0) 10 return half*half*x; 11 else 12 return half*half/x; 13 } 14 };