动态规划-爬楼梯-Java实现(1)

有一座高10级台阶的楼梯,从下往上走,一次只能向上1级或2级台阶,一共有多少种走法?

结题思路:

1.递归:时间复杂度 2^n
2.备忘录算法:时间复杂度n
3.动态规划:时间复杂度n

// 1.递归:时间复杂度 2^n
private static int stepCount(int count) {
        if (count < 1) {
            return 0;
        }
        if (count <= 2) {
            return count;
        }
        return stepCount(count - 1) + stepCount(count - 2);
    }
//2.备忘录算法:时间复杂度n
private static int stepCount2(int count, Map<Integer,Integer> map) {
        if (count<1){
            return 0;
        }
        if (count<=2){
            return count;
        }
        if(map.containsKey(count)){
            return map.get(count);
        }else {
            int value=stepCount2(count-1,map)+stepCount2(count-2,map);
            map.put(count,value);
            return value;
        }
    }
//3.动态规划:时间复杂度n
private static int stepCount3(int count) {
        if (count<1){
            return 0;
        }
        if (count<=2){
            return count;
        }
        int left=1,right=2,temp=0;
        for (int i = 3; i <=count ; i++) {
            temp=left+right;
            left=right;
            right=temp;
        }
        return temp;
    }

注:以上解法出自微信公众号《程序员小灰》.

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