Leetcode - Pow(x, n)

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

    原文作者:Richardo92
    原文地址: https://www.jianshu.com/p/94e538ae3831#comments
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞