力扣hot 100 70.爬楼梯

力扣hot 100 70.爬楼梯

题目描述

​ 假设你正在爬楼梯,需要n阶你才能到达楼顶。每次你可以爬1或者2个台阶。你有多少种不同的方法可以爬到楼顶呢?(给定n是一个正整数)

题目分析

​ 当n=1的时候,只有一种爬法:当n=2的时候,有两种爬法;当n=3的时候,这时候有3种爬法,分别是1+1+1、1+2、2+1;当n=4的时候,有5种爬法,分别是1+1+1+1、1+2+1,2+1+1,1+1+2,2+2......以此类推,可以明显的发现,当n>2的时候,n个台阶的爬法等于n-1和n-2个台阶的爬法的和,有点类似与斐波那契数列,其中的n1和n2变为了1和2。只要发现了爬楼梯的这一个规律,就可以很简单的写出求解的代码了。

public int climbStairs(int n) {
        if(n <= 2){
            return n;
        }
        int i1 = 1;
        int i2 = 2;
        for(int i = 3 ; i <= n ; i++){
            int temp = i1 + i2;
            i1 = i2;
            i2 = temp;
        }
        return i2;
    }

后话

​ 做题的时候,自己的第一想法并没有想到类似斐波那契数列。只是单纯的想到固有一种1+1+1....的爬法,可以将两个1代替为2,第一个2有n-2个摆放位置,类推累加,有一点点的排列组合的感觉,写出来的代码不出意外的超出时间限制了~~ 后面想了想才发现其中规律。

​ 看评论区大佬都说这是一道典型的动态规划题。唔,还是有点迷迷糊糊的.....

posted @ 2022-01-11 23:01  Thales_ZeeWay  阅读(30)  评论(1编辑  收藏  举报