lc50 pow(x,n)

問題可以採用遞歸的形式求解,但是邊界處理爲易錯點,好吧,承認處理了挺久的。

遞歸解法:

class Solution {
    public double myPow(double x, int n) {
        if (n==0) {
 		    return 1.0;
 	    }
 	    if(n == Integer.MIN_VALUE){
            return myPow(x*x, n/2);
        }
 	    if (n<0) {
 		    n=-n;
 		    x=1/x;
 	    }
 	    if (n%2==0) {
 		    return myPow(x*x,n/2);
 	    }else{
 	    	return x*myPow(x*x,n/2);
 	    }
    }
}

非遞歸解法:

class Solution {
    public double myPow(double x, int n) {
    if(x==1||x==-1){
 		if (x==-1&&n%2==0) {
 			return -x;
 		}
 		return x;
 	}//處理x=-1或x=1的情況
 	if (n<0) {
 		x=(double)1/x;    	
 		n=-n;
        if(n==Integer.MIN_VALUE){
            return 0;
        }//注意,如果沒有這句,會輸出無窮,但是加了這一句之後,結果直接給返回0
 	}
 	double pow=1;
 	while(n!=0){
 		if ((n&1)!=0) {
 			pow*=x;
 		}
 		x*=x;
 		n=n>>1;
 	}
 	return pow;  
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章