当前位置: 首页 > news >正文

70.爬楼梯

题目描述

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

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

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

示例 1:

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

示例 2:

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

解题思路

动态规划
  1. 定义状态:dp[i] 表示爬到第 i 阶楼梯的方法数。
  2. 状态转移方程: dp[i] = dp[i-1] + dp[i-2],即爬到第 i 阶楼梯的方法数等于爬到第 i-1 阶楼梯的方法数加上爬到第 i-2 阶楼梯的方法数。
  3. 初始状态: dp[1] = 1dp[2] = 2
  4. 遍历顺序: 从小到大遍历,计算每一层楼梯的方法数。
特殊案例
  • 如果输入 n 为 1 或 2,则直接返回 n

C#代码实现

public int ClimbStairs(int n) {// 如果楼梯只有一阶或者两阶,直接返回阶数if (n == 1 || n == 2) {return n;}// 创建一个数组,长度为n+1int[] dp = new int[n + 1];// 初始化数组,第一阶和第二阶的步数都为1dp[1] = 1;dp[2] = 2;// 从第三阶开始,动态规划计算步数for (int i = 3; i <= n; i++) {// 动态规划转移方程,dp[i] = dp[i - 1] + dp[i - 2]dp[i] = dp[i - 1] + dp[i - 2];}// 返回最后一步的步数return dp[n];
}

C代码实现

int climbStairs(int n) {// 如果楼梯只有一阶或者两阶,直接返回阶数if (n == 1 || n == 2) {return n;}// 定义一个数组,用来存储阶数对应的斐波那契数int* dp = (int*)malloc(sizeof(int) * (n + 1));// 初始化数组,斐波那契数从1开始,所以dp[1]和dp[2]都等于1dp[1] = 1;dp[2] = 2;// 从第三阶开始,斐波那契数等于前两阶的和for (int i = 3; i <= n; i++) {dp[i] = dp[i - 1] + dp[i - 2];}// 返回斐波那契数int result = dp[n];// 释放内存free(dp);return result;
}

时间复杂度和空间复杂度

  • 时间复杂度:O(n),其中 n 是楼梯的阶数。需要计算每一层楼梯的方法数。
  • 空间复杂度:O(n)。使用了一个大小为 n+1 的数组来保存中间结果。
http://www.lryc.cn/news/261852.html

相关文章:

  • 【论文解读】ICLR 2024高分作:ViT需要寄存器
  • 【Redis】AOF 基础
  • C语言—每日选择题—Day50
  • [C/C++]——内存管理
  • PDF文件的限制编辑,如何设置?
  • Linux 中使用 docker 安装 Elasticsearch 及 Kibana
  • 在Flutter中使用PhotoViewGallery指南
  • c语言中的static静态(1)static修饰局部变量
  • 生信算法4 - 获取overlap序列索引和序列的算法
  • springboot 学习网站
  • 论文笔记:A review on multi-label learning
  • 接口文档 YAPI介绍
  • LeetCode 300最长递增子序列 674最长连续递增序列 718最长重复子数组 | 代码随想录25期训练营day52
  • Improving IP Geolocation with Target-Centric IP Graph (Student Abstract)
  • 华为技面三轮面试题
  • Linux arm架构下构建Electron安装包
  • 【CCF BDCI 2023】多模态多方对话场景下的发言人识别 Baseline 0.71 NLP 部分
  • 推免那些事
  • 华清远见嵌入式学习——QT——作业2
  • C# Winfrm 编写一个天气查看助手
  • 基于SpringBoot和微信小程序的农场信息管理系统
  • Linux统计网卡流量
  • 设计可编辑表格组件
  • 低代码是美食!!!
  • 计算机网络网络层(期末、考研)
  • LCR 120. 寻找文件副本
  • git切换分支
  • Android 在UploadEventService使用ThreadPoolManager线程管理传递数据给后台
  • 网络(十)ACL和NAT
  • JavaScript算法46- 最长连续序列(leetCode:128middle)