这道题的一开始的想法是直接乘,时间复杂度为O(n),结果果然在LeetCode上面TLE了。更快的算法是使用divide and conquer的思想:
首先解决特殊值:
如果n == 0,直接返回1;
如果x == 0,直接返回0;
对于其他的情况,如果n是奇数,那么return x * myPow(x * x, n / 2);如果n是偶数,那么return myPower(x * x, n / 2)。时间复杂度为O(logn),代码如下:
public class Solution {
public double myPow(double x, int n) {
if(n == 0)
return 1;
if(n < 0){
n = -n;
x = 1 / x;
}
return (n % 2 == 0) ? myPow(x * x, n / 2) : x * myPow(x * x, n / 2);
}
}
知识点:
1. Java中Integer.MAX_VALUE为pow(2, 31) - 1,而Integer.MIN_VALUE为-pow(2, 31)