50. Pow(x, n)

Implement pow(x, n).

Hide Company Tags
LinkedIn Google Bloomberg Facebook
Hide Tags
Binary Search Math
Hide Similar Problems
(E) Sqrt(x) (M) Super Pow

** 解題思路 **
這道題有幾種解題思路。 主要思想是用二分查找來做, 需要區(qū)分n < 0, n %2 == 1 or n % 2 == 0 幾種情況。 例如,

2 ^ 5  = 2 * myPow( 2 * 2 , 5/2)  
2 ^ 4 =  myPow(2 * 2 ,  4/ 2)

當(dāng)然如果用暴力做法 return x * x * x ... * x (n 個(gè)x 相乘) 會(huì)造成leetcode oj報(bào)錯(cuò)。
下面是五種寫法,僅供參考。

5 solutions for pow(x, n)

  1. nest myPow
double myPow(double x, int n) {
    if(n<0) return 1/x * myPow(1/x, -(n+1));
    if(n==0) return 1;
    if(n==2) return x*x;
    if(n%2==0) return myPow( myPow(x, n/2), 2);
    else return x*myPow( myPow(x, n/2), 2);
}
  1. double myPow
double myPow(double x, int n) { 
    if(n==0) return 1;
    double t = myPow(x,n/2);
    if(n%2) return n<0 ? 1/x*t*t : x*t*t;
    else return t*t;
}
  1. double x
double myPow(double x, int n) { 
    if(n==0) return 1;
    if(n<0){
        n = -n;
        x = 1/x;
    }
    return n%2==0 ? myPow(x*x, n/2) : x*myPow(x*x, n/2);
}
  1. iterative one
double myPow(double x, int n) { 
    if(n==0) return 1;
    if(n<0) {
        n = -n;
        x = 1/x;
    }
    double ans = 1;
    while(n>0){
        if(n&1) ans *= x;
        x *= x;
        n >>= 1;
    }
    return ans;
}
  1. bit operation
    see this solution
    If you have other ideas, please leave it below. Thanks.
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容