LeetCode 70. 爬楼梯

72 篇文章 0 订阅
70. 爬楼梯

难度 简单

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 12 个台阶。你有多少种不同的方法可以爬到楼顶呢?

示例 1:

输入:n = 2
输出:2
解释:有两种方法可以爬到楼顶。
1. 1 阶 + 1 阶
2. 2 阶

示例 2:

输入:n = 3
输出:3
解释:有三种方法可以爬到楼顶。
1. 1 阶 + 1 阶 + 1 阶
2. 1 阶 + 2 阶
3. 2 阶 + 1 阶

提示:

  • 1 <= n <= 45
题解

​ 这道题应该是一道水题,可是没做过的话,不明白背后的数学推导就有点难了。这道题的数学推导是什么呢

  • 一阶,只有一种爬法,就是爬一步

  • 二阶,有两种爬法

    • 1+1,先爬一步,在爬一步
    • 2,直接爬两步
  • 三阶,有三种爬法

    • 1+1+1,一步一步爬
    • 1+2,先怕一步,再爬两步
    • 2+1,先怕两步,再爬一步
  • 四阶,有五种爬法

    • 1、1+1+2
    • 2、2+2
    • 3、1+1+1+1
    • 4、1+2+1
    • 5、2+1+1

    ​ 这里可能看不出规律,但是分析就可以得到规律,因为只有两种步伐,一步或两步,那只能在两阶或者三阶的基础上走。如果在两阶基础上,有上面的第一种(1+1+2)和第二种(2+2);如果在三阶的基础上,有第三种(1+1+1+1),第四种(1+2+1)和第五种(2+1+1).到此我们其实可以总结出规律,就是f(n)=f(n-1)+f(n-2),因为相差一步就是f(n-1)的爬法,相差两步就是f(n-2)的爬法。

  • n阶,f(n)=f(n-1)+f(n-2)

​ 所以这里就可以得出公式

  • n=1,f(n)=1
  • n=2,f(n)=2
  • n>=3,f(n)=f(n-1)+f(n-2)
class Solution {
    int[] ans = new int[46];//打表数组
    public int climbStairs(int n) {
        init();//初始化
        return ans[n];
    }

    void init(){//初始化函数
        ans[1] = 1;//n=1
        ans[2] = 2;//n=2
        for(int i = 3; i <= 45; i++){//n>=3
            ans[i] = ans[i-1] + ans[i-2];
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值