Leetcode每日1题——爬楼梯

4 篇文章 0 订阅
3 篇文章 0 订阅
主要目的为自我学习记录

日期: 2020年6月13日
题号: 70
自评难度: 官方评为简单难度,我认为有点难,得记忆下来
题目: 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。
示例:

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

题目来源于leetcode,地址
题解:
这次可没有暴力法了。

一开始毫无头绪,认为可以先除去2,按照余数以及排列组合的方式去算出可能的解的个数,后来看了大家提到斐波那契,就觉得自己的想法一开始就是错误了。

正确解法(不唯一):

class Solution {
    public int climbStairs(int n) {
        int[] dp = new int[n + 1];
        dp[0] = 1;
        dp[1] = 1;
        for(int i = 2; i <= n; i++) {
            dp[i] = dp[i - 1] + dp[i - 2];
        }
        return dp[n];
    }
}

解释: 代码来自于题解

  1. 首先,将个数为0和1的走法个数写好,因为这两种情况走法都只有1;
  2. 其次,进行数组的for循环,从第三个元素起,每一个元素都等于前两个元素之和。因为每当走到n-1以及n-2步的时候,只需要走一步或者是走两步就可以达到n,因此走到n级台阶的方法等于前两个元素之合。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值