Implement pow(x, n).
第一个版本:
double pow(double x, int n) { if(n==0) return 1.0; if(n<0) return 1.0/pow(x,-n); return x*pow(x,n-1); }
超时
第二个版本:
class Solution { public: double pow(double x, int n) { if(n==0) return 1.0; if(n>0) { if(n%2==0) return pow(x, n/2) * pow(x, n/2); else return pow(x, n-1) * x; } return 1.0/pow(x, -n); } };
Last executed input: 0.00001, 2147483647
超时
错了快几十次, 不得不说, 自己考虑太次
参考大家的:
class Solution { public: double pow(double x, int n) { // Start typing your C/C++ solution below // DO NOT write int main() function if(n<0) { if(n==INT_MIN) return 1.0 / (pow(x,INT_MAX)*x); else return 1.0 / pow(x,-n); } if(n==0) return 1.0; double ans = 1.0 ; for(;n>0; x *= x, n>>=1) { if(n&1>0) ans *= x; } return ans; } };