Algorithm之二分治應用之pow(x,n)

[size=medium][b]設計算法,求 x 的 n 次冪:pow(x, n)[/b][/size]


[b]算法一[/b]

public class Solution {

/*
* Solution 1: Time Limit Exceeded
*
* Test Case:
* x = 0.00001
* n = 2147483647
*/
public double myPow(double x, int n) {
if(x == 0) return 0;
if(n == 0) return 1;
boolean neg = false;
if(n < 0){
neg = true;
n = -n;
}
double r = 1;
while(n > 0){
r *= x;
n--;
}
if(neg) r = 1 / r;
return r;
}

}




[b]算法二[/b]

public class Solution {

/*
* Solution 2: Divider and Conquer
*
* NOTE: 1
* // if(x == 0) return 0;
* // if x = +0, and m is less than 0, the result is positive Infinity.
*
* NOTE: 2
* // 如果 m 是偶數:則直接返回 half * half
* // 如果 m 是奇數:則直接需要在偶數的基礎上,再補上一位。
* // 這一位是 m / 2 時,舍掉的那一位。
*-----------------------------------------------
*/
public double myPow(double x, int m) {
if(m == 0) return 1;
double half = myPow(x, m / 2);

double val = half * half;
if(m % 2 == 0) // 偶數:正、負
return val;
else{

if(m > 0) // 奇數:正
return val * x;
else // 奇數:負
return val * (1 / x);
}
}
}




-
引用:
https://leetcode.com/problems/powx-n


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