一开始没有想太多的东西,直接for循环去算了,但是leetcode判的超时,所以被迫去寻找新的算法。
很容易想到,既然O(n)的时间复杂度不行,理应来说应该是logn的时间复杂度。
易想到用的是基础的二分法思想。
但是二分法也分很多种,总归是要递归或者递推运算的。
最基本的想法就是,讲一个高次幂逐步转化成逐个更大数的乘积,比如,2^5=4^2*2
利用这种思想方式即可探寻快速幂的基本思想了
class Solution { public: double myPow(double x, int n) { double result=1; int n1=abs(n); while(n1>0){ if(n1&1){//位运算,判断是否为奇数 result= result*x; } n1>>=1;//位运算n1/2 x=x*x; } if(n>=0) return result; else return 1/result; } };
原文:https://www.cnblogs.com/director-yu-youki/p/14680093.html