LeetCode_Pow_x_n

来源:互联网 发布:优化农业结构 编辑:程序博客网 时间:2024/04/28 17:37

Implement pow(xn).

题目很简单,就是实现x的n次方运算:

首先要考虑到各种输入情况:

1)x=0 返回0直接退出

2) n=0 返回1直接推出

3)n<0 需要先求x的abs(n)次方,再取倒数

4)n=0,直接求解即可

另外,如果直接进行n次乘法,肯定超时想都不要想,

最初的想法是,对于任何一个数都可以用1+2+2^2+2^3+.......+2^n组成(不用证明了吧,大家都是学计算机的)

所以保存每个x^1,x^2,...,x^n,空间复杂读O(logn)然后对指数n进行拆分,进而进行相乘操作得到结果,以减少乘法执行的次数,当然这里我还没有考虑到最终结果溢出的情况,写完初始的代码后竟然出现MLE,仔细一分析原来并不需要保存中间结果,空间复杂度可以减少到O(1)

代码如下:

class Solution {public:    double pow(double x, int n) {        if (x==0)        {            return 0;        }        if(n==0)        {            return 1;        }                double result=1.0;        double p=x;        //make sure expoment>0        int expoment=abs(n);        int st=1;        //keep the middle result      /*  vector <double> powRel;        powRel.push_back(p);        while (st<=expoment)        {            st=st<<1;            powRel.push_back(p);        }*/        while (expoment>0)        {            if (expoment&1)            {                result*=p;            }            p=p*p;            expoment=expoment>>1;        }        if (n<0)        {            return (1.0/result);        }        return result;    }};


0 0
原创粉丝点击