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;
}
};