[Leetcode] powx n x的n次方

Implement pow(xn).

 题意:计算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 };

 

posted @ 2017-07-19 14:46  王大咩的图书馆  阅读(213)  评论(0编辑  收藏  举报