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

Problem: 70. 爬楼梯

文章目录

题目描述

思路

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

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

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

解题方法

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

2.初始化dp1 = 1; dp2 = 2;

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

4.返回dpn

复杂度

时间复杂度:

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];
    }
};
相关推荐
tachibana26 小时前
hot100 课程表(207)
java·数据结构·算法·leetcode
神仙别闹6 小时前
编写基于C++ Huffman 算法的无损压缩程序和解压程序
java·c++·算法
IT乐手6 小时前
Android 写本地日志工具类
android·java
阿维的博客日记6 小时前
spring里面的@RequestParam什么意思
java·后端·spring
laowangpython6 小时前
昆仑通态 Mcgs Pro软件安装步骤(附安装包)Mcgs Pro 3.3.6 下载安装教程(保姆级)
java·服务器·数据库·其他
旖-旎6 小时前
《LeetCode 646 最长数对链 || LeetCode 1143 最长公共子序列》
c++·算法·leetcode·动态规划
Frostnova丶7 小时前
(15)LeetCode 189. 轮转数组
数据结构·算法·leetcode
罗超驿7 小时前
6.Java LinkedList深度解析:从链表原理到源码实践
java·开发语言·链表
2501_948106917 小时前
计算机毕业设计之jsp物业管理系统
java·大数据·开发语言·汽车·课程设计
黑taoA7 小时前
深度解析:Maven核心命令(clean、compile、package、install)与IDEA多模块项目避坑指南
java·maven·intellij-idea