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

C++算法-青蛙跳台阶【面试】

"青蛙跳台阶"问题是一个经典的递归问题,也与斐波那契数列有关。问题是这样的:一只青蛙站在一个n阶台阶上,它每次可以跳1阶或2阶,问青蛙跳到顶端总共有多少种跳法。

这个问题可以用递归或动态规划来解决。以下是使用C++实现的动态规划解法:

#include <iostream>
#include <vector>// 动态规划解法
int climbStairs(int n) {if (n <= 2) {return n;}// 创建一个数组来存储子问题的解std::vector<int> dp(n + 1, 0);// 初始化前两个台阶的跳法dp[1] = 1;dp[2] = 2;// 计算从3阶到n阶的跳法for (int i = 3; i <= n; ++i) {dp[i] = dp[i - 1] + dp[i - 2];}// 返回n阶台阶的跳法总数return dp[n];
}int main() {int n = 5;std::cout << "Number of ways to climb " << n << " steps is: " << climbStairs(n) << std::endl;return 0;
}

这段代码中,climbStairs函数使用了一个std::vector<int>来存储子问题的解,避免了重复计算。数组dp[i]表示到达第i阶台阶的跳法数。根据题目条件,到达第i阶台阶的跳法数等于到达(i-1)阶和(i-2)阶台阶的跳法数之和。

面试回答示例:
"青蛙跳台阶问题可以通过动态规划来解决。我们首先定义一个数组dp,其中dp[i]表示到达第i阶台阶的跳法数。我们知道到达第一阶和第二阶都只有一种方法。对于更高的台阶,到达那里的方法数是到达前一阶和前两阶台阶的方法数之和,因为青蛙可以选择从这两个位置跳过来。我们从第三阶台阶开始,逐步计算直到第n阶,最终返回dp[n]作为答案。这种方法避免了递归方法中的重复计算,时间复杂度是O(n),空间复杂度也是O(n)。"

http://www.lryc.cn/news/371926.html

相关文章:

  • px转rem插件postcss-plugin-px2rem使用方法(浏览器缩放页面自适应)
  • 批量文件重命名技巧:轻松替换删除文件夹名中的字母,实现高效文件管理新境界
  • windows设备/路由设备上ip地址如何查看、使用
  • 服务端⾼并发分布式结构演进之路
  • Stable Diffusion ProtoVisionXL大模型之艺术盛宴!
  • 浅谈golang字符编码
  • Vite和Webpack的区别是什么,你站队谁?
  • 【微信小程序】事件传参的两种方式
  • 前端针对需要递增的固定数据
  • 红酒保存中的氧气管理:适度接触与避免过度氧化
  • 从零开始搭建开源智慧城市项目(三)上升线效果
  • unity基础(五)地形详解
  • postman接口测试工具详解
  • 2024年护网行动全国各地面试题汇总(3)作者:————LJS
  • 计算机专业的学生要达到什么水平才能进入大厂工作?越早知道越好
  • 巡检费时费力?试试AI自动巡检
  • 46-4 等级保护 - 网络安全等级保护概述
  • css引入方式有几种?link和@import有什么区别?
  • 使用‘消除’技术绕过LLM的安全机制,不用训练就可以创建自己的nsfw模型
  • 解决使用elmessage 没有样式的问题
  • pxe批量部署linux介绍
  • RAG 实践-Ollama+AnythingLLM 搭建本地知识库
  • 【超详细】使用RedissonClient实现Redis分布式锁
  • CC攻击的有效应对方案
  • 自动驾驶基础一车辆模型
  • 机器学习:数据分布的漂移问题及应对方案
  • 公链常用的共识算法
  • 详解 Flink Table API 和 Flink SQL 之函数
  • rsa加签验签C#和js以及java互通
  • C语言中数组和指针的关系