My code:
public class Solution {
public double myPow(double x, int n) {
if (n == 0) {
return 1;
}
else if (n == 1) {
return x;
}
long N = Math.abs((long) n);
double ret = 1;
while (N > 0) {
if ((N & 1) == 1) {
ret *= x;
}
N = (N >> 1);
x *= x;
}
return n < 0 ? 1 / ret : ret;
}
}
reference:
https://discuss.leetcode.com/topic/40546/iterative-log-n-solution-with-clear-explanation/5
https://discuss.leetcode.com/topic/21837/5-different-choices-when-talk-with-interviewers/2
这道题目,写出来之后超时。
比如
3^6
我先算到
3^4
然后接着重算3^2
以此类推。
很明显有重复。
所以我打算加一层cache,把算过的都加进去,就不用重算了。
但还是那个问题,recursion 没有iteration快。
然后就看到了这个iteration的方法。很像是iteration DP,一层层往上递进。
时间复杂度可以说是O(n),也可以说是O(1)
没想到这道题目我以前也没有做过。
Anyway, Good luck, Richardo! — 09/01/2016