美文网首页
[容易]111.爬楼梯

[容易]111.爬楼梯

作者: 我叫小小强 | 来源:发表于2017-07-19 22:21 被阅读21次

    我是小小强,这是我的第12篇原创文章,阅读需要大约10分钟。


    题目

    LintCode:爬楼梯

    描述

    假设你正在爬楼梯,需要n步你才能到达顶部。但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶部?

    样例

    比如n=31+1+1=1+2=2+1=3,共有3中不同的方法

    返回 3

    思路

    假设当前在第n阶上,那么从前面登上第n阶只有两种方式,要么从第n-1阶一步登上来,要么从n-2阶一步登上来。对于n-1或者n-2无法也是重复相同的步骤。所以对第n阶来说,总的方法应该是n-1阶和n-2阶方式之和。

    先排列试试看:

    登上第1级:1种
    登上第2级:2种
    登上第3级:1+2=3种(前一步要么从第1级迈上来,要么从第2级迈上来)
    登上第4级:2+3=5种(前一步要么从第2级迈上来,要么从第3级迈上来)
    登上第5级:3+5=8种
    登上第6级:5+8=13种
    登上第7级:8+13=21种
    登上第8级:13+21=34种
    登上第9级:21+34=55种
    登上第10级:34+55=89种.

    仔细观察,这就是斐波纳契数

    实现

    1. java实现
    public class Solution {
        public int climbStairs(int n) {
            int a = 0, b = 1;
            while (n > 0){
                b = a + b;
                a = b - a;
                n--;
            }
            return b;
        }
    }
    

    想法

    对于有些算法题时,如果一时想不出来解题思路,不如试试从开始条件递归的算一下。对于本题,最开始就陷入死胡同。

    相关文章

      网友评论

          本文标题:[容易]111.爬楼梯

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