/* * @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 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 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