题目
实现 pow(x, n) ,即计算 x 的 n 次幂函数。
示例 1:
输入: 2.00000, 10
输出: 1024.00000
示例 2:
输入: 2.10000, 3
输出: 9.26100
示例 3:
输入: 2.00000, -2
输出: 0.25000
解释: 2-2 = 1/22 = 1/4 = 0.25
说明:
- -100.0 < x < 100.0
- n 是 32 位有符号整数,其数值范围是 [ − 2 31 , 2 31 − 1 ] [−2^{31}, 2^{31} − 1] [−231,231−1] 。
思路
这道题的
n
n
n 范围很大,显然要考虑时间复杂度问题,对于求幂。可以这样来看:
例如:
1
0
100
10^{100}
10100
事实上不需要循环100次,可以这样看:
1
0
100
=
1
0
50
×
1
0
50
=
1
0
25
×
1
0
25
×
1
0
25
×
1
0
25
⋯
10^{100}=10^{50}\times10^{50}=10^{25}\times10^{25}\times10^{25}\times10^{25}\cdots
10100=1050×1050=1025×1025×1025×1025⋯
明显可以看出,可以用二分的思路解题,具体代码如下:
代码
public class Solution {
public double recur(double x, int n){
if (n == 0)
return 1.0;
double mid = recur(x, n/2);
return mid * mid * ((n&1) != 0 ? x:1);
}
public double myPow(double x, int n) {
if (n < 0)
return 1/recur(x, n);
return recur(x, n);
}
public static void main(String[] args) {
Solution solution = new Solution();
System.out.println(solution.myPow(2.0000, -2));
}
}