Pow(x, n)
Implement pow(x, n).
class Solution {
unordered_map<int, double> pTable;
double epsilon;
double pow2(double x, int n){//
if (!n) return 1.0;
if (1 == n) return x;
if (-1 == n) return 1/x;
bool nFlag = false;
if (n < 0) nFlag = true;
if (pTable[n]) return pTable[n];
int half = n/2;
int res = n - half - half;
double r1 = pow2(x, half);
double r2 = pow2(x, res);
double r = r1 * r1 * r2;
if (abs(r1) < epsilon || abs(r2) < epsilon) r = 0;
pTable[n] = r;
return r;
}
public:
double pow(double x, int n) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
epsilon = 0.0001;
pTable.clear();
if (!n) return 1.0;
return pow2(x,n);
}
};
No comments:
Post a Comment