LeetCode——爬楼梯-70

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

注意:给定 n 是一个正整数。
示例 1:

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

示例 2:

输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。
4.  1 阶 + 1 阶 + 1 阶
5.  1 阶 + 2 阶
6.  2 阶 + 1 阶
class Solution {
    public int climbStairs(int n) {
    	int[] dp = new int[n+2];				//定义一个数组用来存储对应的楼层的方法数
        dp[1] = 1;								//第一层有1种方法
        dp[2] = 2;								//第二层有2种方法(每次爬一层,一次爬两层)
        for (int i = 3;i<=n;i++) {				//从第三层开始到指定的楼层
            dp[i] = dp[i-1]+dp[i-2];			//有两种情况:dp[i-1]表示在爬上该层楼梯之前再
            									//走一步就到指定台阶的方式数(一次走一个台阶),
            									//dp[i-2]表示在爬上该层楼梯之前还差一步(跨两个台阶)
            									//到指定台阶的方式数(一次走两个台阶)
        }
        return dp[n];
    }
}

分析:一次可以走一个台阶或者两个台阶,已知只有一个台阶时,上台阶的方式只有一种(一步一个台阶),有两个台阶时,上台阶的方式有两种(一步一个台阶,一步两个台阶)。

当台阶数有三个时,可分为两种情况

  • 一是上到指定台阶之前还差一个台阶(1+1+(1)或者2+(1)),在上来之前,已经上了两层台阶,这两层台阶有多少种方式来上是已知的也就是dp[2],所以这种还差一个台阶就上来的情况的方式就有dp[2] = 2种
  • 二是上到指定台阶之前还差一个台阶(2+(1)),在上来之前,已经上了一层台阶,这一层台阶有多少种方式来上是已知的也就是dp[1] ,所以这种还差两个台阶就上来的情况的方式就有dp[1] = 1种
  • 上台阶的方式只有这两种,这两个的和就是上当前台阶的方式数为dp[1]+dp[2] = 3种。以此类推,上每一层台阶都有这两种方式,结果总是这两种方式的和,也就是该数组的前两项和
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值