美文网首页
[动态规划]一次最多上3阶楼梯,最多几种上法

[动态规划]一次最多上3阶楼梯,最多几种上法

作者: 周末的游戏之旅 | 来源:发表于2019-09-23 11:37 被阅读0次

    问题描述

    有个小孩在上楼梯,楼梯有N阶,小孩一次可上1阶、2阶、3阶。实现一个算法,计算小孩有多少种上楼梯的方式。输入n返回一个整数。

    思路

    当楼梯只有一阶时,只有一种方法(1)
    楼梯有两阶时,有两种方法(1)(2)
    当楼梯有三阶时,有四种方法(111)(12)(21)(22)
    当楼梯有n阶时,最后一次上楼的方法为(n-1)+(n-2)+(n-3)

    namespace ChildStairs
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine(CheckCountWays(4));
            }
    
            static int CheckCountWays(int n)
            {
                if (n == 1) return 1;
                if (n == 2) return 2;
                if (n == 3) return 4;
                return CheckCountWays(n-1)+ CheckCountWays(n-2)+ CheckCountWays(n - 3);
            }
        }
    }
    

    思考

    使用递归的方式虽然简单,但效率低,可以采用备忘录式的动态规划进行优化

    优化后的解

    namespace ChildStairs
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine(CountWays(4));
            }
    
            static int CountWays(int n)
            {
                Dictionary<int, int> dic = new Dictionary<int, int>();
                return CountWaysDP(n, dic);
            }
    
            static int CountWaysDP(int n,Dictionary<int,int> dic)
            {
                if (n == 1) return 1;
                if (n == 2) return 2;
                if (n == 3) return 4;
                if (dic.ContainsKey(n)) return dic[n];
                dic.Add(n, CountWaysDP(n - 1,dic) + CountWaysDP(n - 2,dic) + CountWaysDP(n - 3,dic));
                return dic[n];
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:[动态规划]一次最多上3阶楼梯,最多几种上法

          本文链接:https://www.haomeiwen.com/subject/bywfyctx.html