代码先锋网 代码片段及技术文章聚合

手撕一道算法题 在你面前有一个n阶的楼梯,你一步只能上1阶或2阶。请问,当N=11时,你可以采用多少种不同的方式爬完这个楼梯();当N=9时呢?

技术标签: Java  java  算法  台阶  11  9

前言

今天偶然看到群里有小伙伴在讨论这道算法题,说实话算法题写的确实有些少了近期,都在忙着搬砖,所以简单做个记录。

 

题:

在你面前有一个n阶的楼梯,你一步只能上1阶或2阶。请问,当N=11时,你可以采用多少种不同的方式爬完这个楼梯();当N=9时呢?

 

核心思路,拆解:

 

到达台阶 11时,有可能是通过走 1阶上来的 ;也可能是走2阶上来的;

所以统计出到达 台阶11,也就是统计出 到达10阶  + 到达9阶 的 方法总数。

 

那么到达10阶,同样 有可能是通过走 1阶上来的 ;也可能是走2阶上来的;

所以统计出到达 台阶10,也就是统计出 到达 9 阶  + 到达 8 阶 的 方法总数。

 

那么到达9阶,同样 有可能是通过走 1阶上来的 ;也可能是走2阶上来的;

所以统计出到达 台阶9,也就是统计出 到达 8 阶  + 到达 7 阶 的 方法总数。

 

一样以此类推......

 

那么到达3阶,同样 有可能是通过走 1阶上来的 ;也可能是走2阶上来的;

所以统计出到达 台阶3,也就是统计出 到达2 阶  + 到达 1 阶 的 方法总数。

 

而到达2阶,方法总数有两种, 分两次 1 台阶走 或者 一次走 2  台阶;

而到达1阶,方法总数有一种, 一次走 1 台阶;

 

代码解:

public class Test {

    public static void main(String[] args) {

        //解法1
        Integer result1 = getMethodLoop(11);
        System.out.println(result1); //144

        //解法2
        Integer result2=getSumMethods(11);
        System.out.println(result2); //144
    }
    public  static int getMethodLoop(int sum){

        if (sum==1 ){

            return 1;

        }else if (sum==2){

            return 2;

        }else {

            int m1=sum-1;
            int m2=sum-2;
            int result=  getMethodLoop(m1)+getMethodLoop(m2);
            return  result;
        }




    }


    private static Integer getSumMethods(int sum) {


        Map<String,Integer> map=new HashMap<>();
        map.put("1",1);
        map.put("2",2);

        for (int i=3;i<=sum;i++){

            Integer m1=i-1;
            Integer m2=i-2;
            Integer m1Value = map.get(String.valueOf(m1)) ;
            Integer m2Value = map.get(String.valueOf(m2))  ;
            map.put(String.valueOf(i),m1Value+m2Value);
        }
        System.out.println(map.toString());
       return  map.get(String.valueOf(sum));
        //{11=144, 1=1, 2=2, 3=3, 4=5, 5=8, 6=13, 7=21, 8=34, 9=55, 10=89}
    }





}


 

 

版权声明:本文为qq_35387940原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_35387940/article/details/107844855

智能推荐

爬楼梯问题,一次可以爬1阶,2阶3阶,但是爬了一次3阶以后的K步都不能走3阶,问N个台阶在给定K的情况下有多少种情况

爬楼梯问题,一次可以爬1阶,2阶3阶,但是爬了一次3阶以后的K步都不能走3阶,问N个台阶在给定K的情况下有多少种情况 d p [ i ] [ j ] dp[i][j] dp[i][j]表示爬到第 i i i级台阶,距离上次爬三阶步数 j j j步的状态。 d p [ i ] [ j ] dp[i][j] dp[i][j]可以转移到哪些状态? 如果 0 ≤ j < k 0 \leq j ...

楼梯有n个台阶,上楼可以一步上1阶,也可以一步上两阶。一共有多少种上楼的方法?

楼梯有n个台阶,上楼可以一步上1阶,也可以一步上两阶。一共有多少种上楼的方法?...

N阶楼梯上楼问题:一次可以走两阶或一阶,问有多少种上楼方式。(要求采用非递归)

题目描述 N阶楼梯上楼问题:一次可以走两阶或一阶,问有多少种上楼方式。(要求采用非递归) 输入描述: 输出描述: 示例1 输入 复制 输出 复制  ...

java递归:有N阶楼梯,一次上1阶或2阶,工多少种方法

在方法内调用自身,找规律:F(3)=F(2)+F(1),所以F(N)=F(N-1)+F(N-2)...

爱因斯坦的题目:在你面前有一条长长的阶梯,如果每步跨2阶,那么最后剩1阶;如果每步跨3阶,那么最后剩2阶.....................

在你面前有一条长长的阶梯,如果每步跨2阶,那么最后剩1阶;如果每步跨3阶,那么最后剩2阶;如果每步跨5阶,那么最后剩4阶;如果每步跨6阶,最后剩5阶;只有当每步跨7阶时,最后才正好走完,一阶也不剩。请问这条阶梯至少有多少阶?(求所有三位阶梯数)。...

猜你喜欢

一个小孩上楼梯,可以走 一步, 两步,三步, 问走n阶楼梯有多少种走法(Java 递归与迭代)

上楼梯有多少种走法 一个小孩上楼梯,可以走 一步, 两步,三步, 问走n阶楼梯有多少种走法...

N阶楼梯上楼问题:一次可以走两阶或一阶,问有多少种上楼方式

N阶楼梯上楼问题:一次可以走两阶或一阶,问有多少种上楼方式?   思路一:设有x次走一阶,y次走两阶,则一定满足x+2*y=n,且x、y均为整数,那么对于任何一个满足的x的可能走法共有 C(x+(n-x)/2,x)种走法,即从数x+(n-x)/2中取x种组合,值为(x+(n-x)/2)的阶乘除以x的阶乘与(n-x)/2的阶乘的乘积。 依次取可能的x值,然后相加每一种的可能情况就可以了。代...

N阶楼梯上楼问题:一次可以走两阶或一阶,问有多少种上楼方式

题目描述: N阶楼梯上楼问题:一次可以走两阶或一阶,问有多少种上楼方式。 输入: 输入包括一个整数N。 输出: 可能有多组测试数据,对于每组数据, 输出当楼梯阶数是N时的上楼方式个数。 样例输入: 4 样例输出: 5 思路一:设有x次走一阶,y次走两阶,则一定满足x+2*y=n,且x、y均为整数,那么对于任何一个满足的x的可能走法共有 C(x+(n-x)/2,x)种走法,即从数x+(n-x)/2中...

n阶楼梯,每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。 示例 1: 输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶。 示例 2: 输入: 3 输出: 3 解释: 有三种方法可以爬到楼顶。 4. 1 阶 + 1 阶 + 1 阶 5. 1 阶 + 2 阶 6. 2 阶 + 1 阶 总结: 想象一下,...

【13.77%】【codeforces 734C】Anton and Making Potions

time limit per test4 seconds memory limit per test256 megabytes inputstandard input outputstandard output Anton is playing a very interesting computer game, but now he is stuck at one of the levels. T...