LeetCode 50.Pow(x, n)
计算x的n次幂函数。
-100.0 < x < 100.0
n 是 32 位有符号整数,其数值范围是 [−2^31, 2^31 − 1] 。
解析:
- 负数的边界 -2^31 , 直接转正数会越界。
正数边界2^31 − 1,负数转正2^31,越界。
所以将n的类型int转为类型long。 - 次幂n是负数,首先要转正,将1/x,再-n转正。
- 如果次幂是单数,我们先保留下x,将次幂n-1,再在最终结果res乘x。
- 因为二分查找每次减半(i/2),所以我们从后向前循环。
- 如果 i 取模2为1,证明幂次为单数,我们就要乘一次之前保留的x值。
- 走到最后都会进入if(i % 2 == 1),这个判断,得到最终res值。
二分查找
class Solution {
public double myPow(double x, int n) {
long N = n;
double res = 1.0;
if (N < 0){
x = 1/x;
N = -N;
}
//辅助变量取x值,如果幂次是单数,那就将这个数乘一次
double cur = x;
for(long i = N; i > 0; i /= 2){
if(i % 2 == 1){
res *= cur;
}
cur *= cur;
}
return res;
}
}
最快解法
class Solution {
public double myPow(double x, int n) {
return Math.pow(x,n);
}
}
哈哈哈哈,直接用公式,捷径。
暴力解法
class Solution {
public double myPow(double x, int n) {
double res = 1;
if (n < 0){
x = 1/x;
n = -n;
}
for(int i = 0; i < n; i++){
res *= x;
}
return res;
}
}
版权声明:本文为weixin_51136573原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。