刷题-Leetcode-50. Pow(x, n)

50. Pow(x, n)

题目链接

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/powx-n/submissions/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题目描述

在这里插入图片描述

题目分析

递归算法的时间复杂度本质上是要看: 「递归的次数 * 每次递归中的操作次数」。
时间复杂O(logn)

class Solution {
    
    
public:
    double myPow(double x, int n) {
    
    
        double res = n >= 0 ? p(x, n) : 1 / p(x, -(unsigned int)n);//溢出的原因是有符号 int 类型变量在 C 里的范围是[-2147483648, 2147483647],如果对 -2147483648 直接取绝对值就会导致溢出,所以先用 unsigned int 对 n 进行强制类型转换。
        return res;
    }
    double p(double x, int n){
    
    
        if(n == 0) return 1.0;
        double res = p(x, n / 2);
        if(n % 2 == 0){
    
    //注意:是%不是/
            return res * res;
        }
        return res * res * x;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_42771487/article/details/118101552