美文网首页
一次最多上3阶楼梯,最多几种上法

一次最多上3阶楼梯,最多几种上法

作者: 周末的游戏之旅 | 来源:发表于2019-08-03 10:55 被阅读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阶楼梯,最多几种上法

    问题描述 有个小孩在上楼梯,楼梯有N阶,小孩一次可上1阶、2阶、3阶。实现一个算法,计算小孩有多少种上楼梯的方式。...

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

    问题描述 有个小孩在上楼梯,楼梯有N阶,小孩一次可上1阶、2阶、3阶。实现一个算法,计算小孩有多少种上楼梯的方式。...

  • 7.2走楼梯

    有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶,2阶,3阶,请实现一个方法,计算小孩有多少种上楼梯的方式....

  • 三步问题

    三步问题。有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一种方法,计算小孩有多少种上楼梯...

  • 上楼梯问题

    有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶、3阶。请实现一个方法,计算小孩有多少种上楼的方式。为...

  • N阶楼梯上楼问题

    题目描述 N阶楼梯上楼问题,一次可以走两阶或者一阶,问又多少种上楼方式 分析 典型的动态规划问题,N阶楼梯可以由N...

  • 小白上楼梯简易递归问题

    题目: 小白正在上楼梯,楼梯共n阶 小白可以一次上1阶,2阶或3阶 计算小白有多少种走完楼梯的方式 样例输入: 3...

  • 动态规划相关算法1

    斐波那契数列,爬楼梯:有 N 阶楼梯,每次可以上一阶或者两阶,求有多少种上楼梯的方法f(n)=f(n-1)+f(n...

  • [LeetCode OJ]- Climbing Stairs

    题目要求:爬楼梯可以一次爬一阶或者一次爬两阶,求爬n阶楼梯一共有多少中爬法。 思路:算法课中老师用来举例的DP问题...

  • leetcode --- 三步问题(DP)

    三步问题leetcode-golang 问题 有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。...

网友评论

      本文标题:一次最多上3阶楼梯,最多几种上法

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