34 lines
757 B
Java
34 lines
757 B
Java
/*
|
|
* @lc app=leetcode id=50 lang=java
|
|
*
|
|
* [50] Pow(x, n)
|
|
*/
|
|
|
|
// @lc code=start
|
|
|
|
import java.util.Map;
|
|
|
|
class Solution {
|
|
public double myPow(double x, int n) {
|
|
Map<Long, Double> track = new HashMap<>();
|
|
long m = n;
|
|
return m>=0?myPow(x, m, track):1/myPow(x, -m, track);
|
|
}
|
|
|
|
private double myPow(double x, long n, Map<Long, Double> track) {
|
|
if(n < 0) {
|
|
throw new RuntimeException("not supported number");
|
|
} else if(n <= 1) {
|
|
return n==0?1:x;
|
|
} else if(track.containsKey(n)) {
|
|
return track.get(n);
|
|
}
|
|
long l = n / 2;
|
|
double r = myPow(x, l, track) * myPow(x, n-l, track);
|
|
track.put(n, r);
|
|
return r;
|
|
}
|
|
}
|
|
// @lc code=end
|
|
|