LeetCode第50题-pow(x,n)-java实现-图解思路与手撕代码
一、题目描述
实现 pow(x, n) ,即计算 x 的整数 n 次幂函数(即x^n )。
二、解题思路与代码实现
1.解题思路
将n转化为二进制,比如9转化为1001,每一位表示res是否乘以x
将1001向右移位,每次移位,x翻倍。
为了解决n可能是-2^31的情况,将n转换为long格式。
2.代码实现
代码如下(示例):
private static double myPow(double x, int n) {
if(x == 0.0f) return 0.0d;
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;
}
总结
这道题最初想到要把n转化为各阶倍数相加的形式,比如9=1 * 1+0 * 2+0 * 4+1 * 8,但是通过将9转化为二进制的形式来获得各阶倍数的系数,的确非常巧妙。