Algorithmの二分割応用のpow(x,n)
もっと読む
設計アルゴリズム、xのn乗を求める:pow(x,n)
アルゴリズム1
参照:
https://leetcode.com/problems/powx-n
を選択します.
設計アルゴリズム、xのn乗を求める:pow(x,n)
アルゴリズム1
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;
}
}
アルゴリズム2
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
を選択します.