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

[蓝桥杯]求解台阶问题

求解台阶问题

题目描述

现一个算法求解台阶问题。介绍如下:

  • 对于高度为 nn 的台阶,从下往上走,每一步的阶数为 1,2,3 中的一个。问要走到顶部一共有多少种走法。

输入描述

输入一个数字 N (1≤N≤35)N (1≤N≤35),表示台阶的高度。

输出描述

输出一行,为走法总数。

输入输出样例

示例

输入

4

输出

 7

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 256M
  • 台阶问题解法(动态规划)

  • 对于高度为 n 的台阶,每次可走 1、2 或 3 步,求走法总数的问题,可通过动态规划高效解决。其核心递推公式为:
    f(n)=f(n−1)+f(n−2)+f(n−3)(n≥3)
    基础情况为:

  • f(0)=1(无台阶时视为 1 种方式)
  • f(1)=1(仅 1 种方式:走 1 步)
  • f(2)=2(2 种方式:1+1 或 2
  • ​初始化基础值​
    直接处理 n=0,1,2 的情况。
  • ​动态规划递推​
    使用滚动变量优化空间复杂度(O(1)):
    • 定义 a = f(0)b = f(1)c = f(2)
    • 从 i=3 开始迭代至 n:
      • 计算当前值 current = a + b + c
      • 滚动更新:a = bb = cc = current
  • ​输出结果​
    最终 c 即为 f(n)。
    #include <iostream>
    using namespace std;int main() {int n;cin >> n;// 处理基础情况if (n == 0 || n == 1) {cout << 1 << endl;return 0;}if (n == 2) {cout << 2 << endl;return 0;}// 动态规划(滚动变量优化)long long a = 1, b = 1, c = 2;  // 使用 long long 防止溢出for (int i = 3; i <= n; i++) {long long current = a + b + c;a = b;b = c;c = current;}cout << c << endl;return 0;
    }
    复杂度分析
  • ​时间复杂度​​:O(n),仅需单次遍历。
  • ​空间复杂度​​:O(1),仅用 3 个变量存储状态。
示例验证
输入 n输出 f(n)走法分解(共 f(n) 种)
111
221+12
341+1+11+22+13
471+1+1+11+1+21+2+12+1+12+21+33+1

    相关文章:

  • Redis 缓存问题及其解决方案
  • DrissionPage 异常处理实战指南:构建稳健的网页自动化防线
  • Eureka 高可用集群搭建实战:服务注册与发现的底层原理与避坑指南
  • n8n 自动化平台 Docker 部署教程(附 PostgreSQL 与更新指南)
  • (13)java+ selenium->元素定位大法之By_partial_link_text
  • 04 APP 自动化- Appium toast 元素定位列表滑动
  • 内网横向之RDP缓存利用
  • Redis 缓存粒度如何控制?缓存整个对象还是部分字段?
  • Mac 芯片系列 安装cocoapod 教程
  • 【linux】VNC无头显示器启动方法
  • Neo4j 备份与恢复:原理、技术与最佳实践
  • 高效易用的 MAC 版 SVN 客户端:macSvn 使用体验
  • HALCON 深度学习训练 3D 图像的几种方式优缺点
  • 2022年 国内税务年鉴PDF电子版Excel
  • C#基础语法(2)
  • lsinitramfs命令
  • 定时器:中央对齐模式剖析
  • 06-排序
  • Java Lambda 表达式的缺点和替代方案
  • 破局与进阶:ueBIM 在国产 BIM 赛道的差距认知与创新实践
  • 淘宝客做网站怎么做/百度竞价登陆
  • wordpress插件关闭更新/宁波优化seo软件公司
  • 公司做网站的费属于广告费么/智能建站系统
  • 网站商务通客服端/景德镇seo
  • 目前做哪些网站能致富/chrome谷歌浏览器官方下载
  • 网站联盟的收益模式/英文谷歌seo