力扣70. 爬楼梯(动态规划 Java,C++解法)

Problem: 70. 爬楼梯

文章目录

题目描述

思路

由于本题目中第i层台阶只能由于第i- 1 层台阶和第i-2层台阶走来,所以可以联想到动态规划,具体如下:

1.定义多阶段决策模型:对于每一上台阶看作一种状态;

2.定义状态转移方程:int[] dp = new int[n + 1]用于记录第i个台阶可以走到的走法;dp[i] = dp[i - 1] + dp[i - 2];

解题方法

1.定义数组int[] dp = new int[n + 1]用于记录第i个台阶可以走到的走法

2.初始化dp[1] = 1; dp[2] = 2;

3.从dp数组下标为3处开始完成动态转移方程;

4.返回dp[n]

复杂度

时间复杂度:

O ( n ) O(n) O(n);其中 n n n为台阶数

空间复杂度:

O ( n ) O(n) O(n)

Code

java 复制代码
class Solution {
    /**
     * Dynamic programing
     * @param n The number of stage
     * @return int
     */
    public int climbStairs(int n) {
        if (n <= 2) {
            return n;
        }
        //Record how many moves there are on step i
        int[] dp = new int[n + 1];
        dp[1] = 1;
        dp[2] = 2;
        for (int i = 3; i <= n; ++i) {
            dp[i] = dp[i - 1] + dp[i - 2];
        }
        return dp[n];
    }
}
cpp 复制代码
class Solution {
public:
    int climbStairs(int n) {
        if (n <= 2) {
            return n;
        }
        vector<int> dp(n + 1);
        dp[1] = 1;
        dp[2] = 2;
        for (int i = 3; i <= n; ++i) {
            dp[i] = dp[i - 1] + dp[i - 2];
        }
        return dp[n];
    }
};
相关推荐
雷渊15 分钟前
深入分析mybatis中#{}和${}的区别
java·后端·面试
梭七y15 分钟前
【力扣hot100题】(020)搜索二维矩阵Ⅱ
算法·leetcode·职场和发展
亦是远方21 分钟前
2025华为软件精英挑战赛2600w思路分享
android·java·华为
花月C35 分钟前
Spring IOC:容器管理与依赖注入秘籍
java·开发语言·rpc
ylfhpy41 分钟前
Java面试黄金宝典22
java·开发语言·算法·面试·职场和发展
烁3471 小时前
每日一题(小白)动态规划篇2
算法·动态规划
风象南1 小时前
Spring Boot 实现文件秒传功能
java·spring boot·后端
橘猫云计算机设计1 小时前
基于django优秀少儿图书推荐网(源码+lw+部署文档+讲解),源码可白嫖!
java·spring boot·后端·python·小程序·django·毕业设计
黑猫Teng1 小时前
Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现与实战指南
java·spring boot·后端
星河浪人1 小时前
Spring Boot启动流程及源码实现深度解析
java·spring boot·后端