剑指 Offer 16. 数值的整数次方
剑指 Offer 16. 数值的整数次方
题目
链接
https://leetcode-cn.com/problems/shu-zhi-de-zheng-shu-ci-fang-lcof/
问题描述
实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。不得使用库函数,同时不需要考虑大数问题。
示例
输入:x = 2.00000, n = 10
输出:1024.00000
提示
-100.0 < x < 100.0
-231 <= n <= 231-1
-104 <= xn <= 104
思路
快速幂,就相当于用二分法对指数进行处理。
复杂度分析
时间复杂度 O(logn)
空间复杂度 O(1)
代码
Java
public double myPow(double x, int n) {
if (x == 0) {
return 0;
}
long b = n;
double res = 1.0;
if (b < 0) {
x = 1 / x;
b = -b;
}
while (b > 0) {
if ((b & 1) == 1) {
res *= x;
}
x *= x;
b >>= 1;
}
return res;
}