原题
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
My Answer
# -*- coding:utf-8 -*-
class Solution:
def Power(self, base, exponent):
# write code here
return base ** (exponent)
当然本题不是想让调用函数求解,而是希望能找出规律进行求解;
思路
-
位运算 - 快速幂
-
示例
求 `3^20 = 9^10 = 81^5 (= 81*81^4) = 81*6561^2 = 81*43046721` 循环次数 = `bin(20)`的位数 = `len(10100)` = 5
-
时间复杂度
O(logN)
C++ Version:
class Solution {
public:
double Power(double base, int exponent) {
int exp = abs(exponent);
double temp_res = 1.0;
while(exp != 0){
if (exp & 1){
temp_res *= base;
}
base *= base;
exp >>= 1;
}
return exponent < 0? 1/temp_res : temp_res;
}
};
Python Version:
# -*- coding:utf-8 -*-
class Solution:
def Power(self, base, exponent):
# write code here
exp = abs(exponent)
res = 1
while(exp != 0):
if exp & 1:
res *= base
base *= base
exp >>= 1
return res if exponent > 0 else 1/res
Note:
- 重写python版本时候犯了一个很傻的错误,以为
exp >> 1
之后exp就会发生变化,事实上,应该是exp >>= 1
,必须带上赋值符号!!!