[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
-