写点什么

算法攻关 -climbing-stairs(O(n))_70

发布于: 2021 年 03 月 15 日
算法攻关-climbing-stairs(O(n))_70

一、题目描述

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

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

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

示例 1:

输入: 2

输出: 2

解释: 有两种方法可以爬到楼顶。

1.  1 阶 + 1 阶

2.  2 阶

示例 2:

输入: 3

输出: 3

解释: 有三种方法可以爬到楼顶。

1.  1 阶 + 1 阶 + 1 阶

2.  1 阶 + 2 阶

3.  2 阶 + 1 阶

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/climbing-stairs

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、思路

本问题其实常规解法可以分成多个子问题,爬第 n 阶楼梯的方法数量,等于 2 部分之和


爬上 n-1 阶楼梯的方法数量。因为再爬 1 阶就能到第 n 阶

爬上 n-2 阶楼梯的方法数量,因为再爬 2 阶就能到第 n 阶

所以我们得到公式 dp[n] = dp[n-1] + dp[n-2]

同时需要初始化 dp[0]=1 和 dp[1]=1

时间复杂度:O(n)

空间复杂度:O(n)

三、代码实现

class Solution {    public int climbStairs(int n) {        //初始化DP数组        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];    }}
复制代码

四、小结

还有很多种解法,可以参考下官方答案。


发布于: 2021 年 03 月 15 日阅读数: 8
用户头像

小胜靠智,大胜靠德 2019.06.27 加入

历经创业、京东、腾讯、滴滴公司,希望能够有些东西一起分享。公众号:小诚信驿站,微信/CSDN搜索:wolf_love666

评论

发布
暂无评论
算法攻关-climbing-stairs(O(n))_70