Leetcode 70 爬楼梯

题意理解

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。其中每次只能爬1阶或2阶。

问:爬到楼顶有几种走法?

如: n=1 爬一阶: 1

n=2 爬两阶: 1+1 要么从第1阶再爬一阶,要么从第0阶,一次性爬两阶

n=3 爬三界: 1+2 (1+1)+1 2+1

要么从第2阶再爬一阶即可,要么在第1阶一次性爬两阶即可

而爬到第1阶有一种方式,爬到第2阶有两种方式

故爬到第三阶有1+2=3种方式

则有递推公式:f[i]=f[i-1]+f[i-2]

解题思路

采用动态规划的方式求解此题,按照五个步骤来分析。

  1. 确定dp[]数组和下标的含义,其中dp[i]表示爬到第i阶有几种方式。

  2. 确定递归函数:dp[i]=dp[i-1]+dp[i-2]

  3. 初始化:dp[1]=1 dp[2]=2

  4. 确定遍历方式:总是前面的结果影响后续取值,所以遍历顺序总是从前到后

5.打印dp数组,用于debug

1.动态规划解题

java 复制代码
 public int climbStairs(int n) {
        //定义存储
        int[] dp=new int[n+1];
        //初始化
        dp[1]=1;
        if(n>1) dp[2]=2;
        //遍历
        for(int i=3;i<=n;i++){
            dp[i]=dp[i-1]+dp[i-2];
        }
        return dp[n];
    }

2.存储压缩

使用数值取代数组存储结果。空间复杂度O(n+1)------>O(3)

java 复制代码
public int climbStairs(int n) {
        //定义存储
        int sum=0,dp1=1,dp2=2;
        if(n==1) return dp1;
        if(n==2) return dp2;
        //初始化
        sum=dp1+dp2;
        //遍历
        for(int i=3;i<=n;i++){
            sum=dp1+dp2;
            dp1=dp2;
            dp2=sum;
        }
        return sum;
    }

3.分析

时间复杂度:O(n) 用于遍历n个状态值

空间复杂度

数组存储 O(n)

数值存储 O(1)

n表示输入的数值的大小。

相关推荐
C++忠实粉丝8 分钟前
计算机网络socket编程(4)_TCP socket API 详解
网络·数据结构·c++·网络协议·tcp/ip·计算机网络·算法
祁思妙想26 分钟前
10.《滑动窗口篇》---②长度最小的子数组(中等)
leetcode·哈希算法
福大大架构师每日一题37 分钟前
文心一言 VS 讯飞星火 VS chatgpt (396)-- 算法导论25.2 1题
算法·文心一言
EterNity_TiMe_1 小时前
【论文复现】(CLIP)文本也能和图像配对
python·学习·算法·性能优化·数据分析·clip
机器学习之心1 小时前
一区北方苍鹰算法优化+创新改进Transformer!NGO-Transformer-LSTM多变量回归预测
算法·lstm·transformer·北方苍鹰算法优化·多变量回归预测·ngo-transformer
yyt_cdeyyds1 小时前
FIFO和LRU算法实现操作系统中主存管理
算法
daiyang123...2 小时前
测试岗位应该学什么
数据结构
alphaTao2 小时前
LeetCode 每日一题 2024/11/18-2024/11/24
算法·leetcode
kitesxian2 小时前
Leetcode448. 找到所有数组中消失的数字(HOT100)+Leetcode139. 单词拆分(HOT100)
数据结构·算法·leetcode
VertexGeek2 小时前
Rust学习(八):异常处理和宏编程:
学习·算法·rust