Implement pow(
x
,
n
).
思路:TLE和WA了好几次。
参考代码:
优化后c++代码:
class Solution {
public:
double pow(double x, int n) {
double ans = 1;
bool flag = true;
if (n < 0) {
flag = false;
n = -n;
}
while (n) {
if (n % 2 != 0) {
ans *= x;
}
x *= x;
n /= 2;
}
if (flag) {
return ans;
}
return 1.0 / ans;
}
};
python 代码1:利用a^n = a^n/2 * a^n/2
class Solution:
# @param x, a float
# @param n, a integer
# @return a float
def pow(self, x, n):
if not n: return 1
if n == 1: return x
flag = True
if n < 0:
flag = False
n = -n
ans = 1.0
while n:
if n & 0x1:
ans *= x
x *= x
n /= 2
if flag:
return ans
else:
return 1.0 / ans
python代码2:
class Solution:
# @param x, a float
# @param n, a integer
# @return a float
def pow(self, x, n):
if not n: return 1
if n == 1: return x
flag = True
if n < 0:
flag = False
n = -n
ans = 1.0
cnt = 0
while cnt < n:
tmpow = 1
tmpans = x
while cnt+tmpow*2 <= n:
tmpow *= 2
tmpans *= tmpans
cnt += tmpow
ans *= tmpans
if flag:
return ans
else:
return 1.0 / ans