LeetCode 50 Pow(x, n) —— 可分治问题用递归降低复杂度

起初拿到这个问题,感觉这丝毫不像是中等难度题,一个循环即可解决问题。大键盘一挥写出如下代码:

class Solution {
public:
    double myPow(double x, int n) {
        double sum;
        int t;
        if(n<0)
            t=-n;
        else 
            t=n;
        
        sum = 1;
        for(int i = 0; i<t; i++)
        {
             sum = sum * x;   
        }
        
        if(n<0)
            sum=1/sum;

        return sum;
    }
};

结果是我图样图森破了,提交结果是超出时间限制,看到样例自己都害怕这样做的复杂度,于是考虑如何降低复杂度。最终想到了这种可分治算法的一种通用解决思路:用迭代。

class Solution {
public:
    double myPow(double x, int n) {
        double sum;
        
        //边界问题
        if(n==-2147483648) 
        {
            if(x==1||x==-1) return 1;
            else return 0;
        }
        
        //递归思想:用于可分治类型的东西
        if(n<0)
            sum = 1/myPow(x,-n);
        else if(n==0)
            sum = 1;
        else if(n==1)
            sum = x;
        else if(n==2)
            sum = x*x;
        else if(n%2 == 0)
        {
            double s = myPow(x,n/2);
            sum = s*s; 
        }    
        else
        {
            double s = myPow(x,n/2);
            sum = s*s*x;
        }
        


        return sum;
    }
};

最终完成,复杂度成功降低。

猜你喜欢

转载自blog.csdn.net/weixin_42979679/article/details/84199173
今日推荐