详细描述: 实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。
示例 1:
输入: 2.00000, 10
输出: 1024.00000
限制:
- -100.0 < x < 100.0
- n 是 32 位有符号整数,其数值范围是 [−231, 231 − 1] 。
考查: 分治、二分法、递归、二进制
思考:首先想到的是暴力破,然而当鞋写完之后,发现超时了,万不得已,想到二分法,但是却不太熟练,只能写点,看看参考答案,发现了很多的方法,例如递归以及二进制等
解法(一):二分法
class Solution {
public double myPow(double x, int n) {
if(n==1) return x;
if(n==0) return 1;
if(n==-1) return 1/x;
if (n % 2 == 0) {
double t = myPow(x, n / 2);
return t * t;
} else {
double t = myPow(x, n / 2);
if (n < 0) x = (1 / x);
return t * t * x;
}
}
}
解析:
- 复杂度的分析:
- 时间复杂度:O(log2N)
- 空间复杂度: 1
执行用时:1 ms
内存消耗:36.9 MB
解法(二):二进制
class Solution {
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;
}
}
作者:jyd
链接:https://leetcode-cn.com/problems/shu-zhi-de-zheng-shu-ci-fang-lcof/solution/mian-shi-ti-16-shu-zhi-de-zheng-shu-ci-fang-kuai-s/
解析:
- 复杂度的分析:
- 时间复杂度:
- 空间复杂度:
执行用时: ms
内存消耗: MB