题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
保证base和exponent不同时为0
解题思路:
简单来说,题目就是求a的n次方。直接for循环暴力,复杂度O(N)可能会导致超时。我们可以想办法将复杂度降到O(LogN)。
- 幂次exponent每次右移一位
- 底数base每次都是乘以本身,幂次每次降低一半
- res在exponent的最后一位是1的时候收集答案
- 比如2^6次方就成了 (2 ^2) * (2 ^4)
/**
* @author: hyl
* @date: 2019/08/15
**/
public class Que12 {
public double Power(double base, int exponent) {
if (base == 0.0){
return 0;
}
double res = 1.0;
for (int i = exponent; i != 0 ; i >>= 1) {
if (exponent % 2 != 0){
res *= base;
}
base *= base;
}
return exponent < 0 ? 1 / res : res;
}
}
代码地址:
https://github.com/Han-YLun/jianzhiOffer/blob/master/Solution/src/Que12.java
文章为阿伦原创,如果文章有错的地方欢迎指正,大家互相交流。