注意:本题与主站 50 题相同:https://leetcode-cn.com/problems/powx-n/
解题思路:
class Solution {
public:
double myPow(double x, int n) {
bool flag = false;
long long N = n;//赋值n
if (N == 0) return 1;//0次方
if (N < 0) flag = true, N = -N;
double ret = 1;
for (int i = 0; i < 32; ++i) {//由于不超过2的32次方减一,故i少于32
if ((1 << i) & N) ret *= x;//1 << i表示1的二进制左移i位
//(1 << i) & N求N的二进制中的1
x = x * x;
}
if (flag) return 1.0 / ret;//负次方
else return ret;//正数次方
}
};
复杂度分析:
时间复杂度 O(log 2 n) : 二分的时间复杂度为对数级别。
空间复杂度 O(1) : res, b 等变量占用常数大小额外空间。