题目描述:
实现pow(x,n),即计算x的整数n次幂函数(即x^n)。
示例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
提示:
-100.0 < x < 100.0
-231 <= n <= 231-1
n
是一个整数- 要么
x
不为零,要么n > 0
。-104 <= xn <= 104
解题思路:
遍历<样例通过,但是部分测试样例会超时,294 / 307 个通过的测试用例>
double myPow(double x, int n) { double ans=1; if( (n==0 && x!=0) || x==1) return 1; if(x==0) return 0; if(n<0) { n=-n; x=1/x; } while(n) { ans=ans*x; n--; } return ans; }
改为二进制:
如何快速计算x的13次幂,13=1+4+8,13的二进制为1101,遇到1就乘以x的对应次幂。
double myPow(double x, int N) { double ans=1; long long n = N; if( (n==0 && x!=0) || x==1) return 1; if(x==0) return 0; if(n<0) { n=-n; x=1/x; } while(n) //从低到高枚举n个每个比特位 { if(n & 1) //这个比特位为1 ans=ans*x; //把x乘以ans中 x=x*x; //x自身平方 n>>=1; //继续枚举下一个比特位 } return ans; }
- 时间复杂度:O(log|n|)
- 空间复杂度:O(1)