实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。不得使用库函数,同时不需要考虑大数问题。
示例 1:
输入:x = 2.00000, n = 10 输出:1024.00000 示例 2:
输入:x = 2.10000, n = 3 输出:9.26100 示例 3:
输入:x = 2.00000, n = -2 输出:0.25000 解释:2-2 = 1/22 = 1/4 = 0.25
我的思路:如果n 为负数,则求 1/x的n次方,如果n为整数,则求x的n次方。
但是最后几个测试用例过不了,求大佬优化!!!
大佬思路: 快速幂
引用K神讲解
class Solution { public double myPow(double x, int n) { if(x == 0) return 0;//等于0就直接返回 long b = n;//用long型存储n,防止n为-2^31时,-n会越界 double res = 1.0;//将res初始值设为1,避免n为奇数数,多出一项,可以将1当做x^0,且当x=0时,可以直接返回res; //如果 n为负数,则要把负数转变为正数计算 if( b < 0){ x = 1 / x; b = -b ; } while( b > 0){ if((b & 1) == 1) res *= x; //如果b的二进制某位为1,说明需要把这个项乘起来,比如:11的二进制为1011, x *= x;// x是每一轮循环都需要乘的。 b = b >> 1; //求 b 的下一位二进制数,知道 b = 0。 } return res; } }