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)。"

相关推荐
充值修改昵称8 分钟前
数据结构基础:从二叉树到多叉树数据结构进阶
数据结构·python·算法
Deepoch20 分钟前
Deepoc数学大模型:发动机行业的算法引擎
人工智能·算法·机器人·发动机·deepoc·发动机行业
点云SLAM37 分钟前
C++内存泄漏检测之Windows 专用工具(CRT Debug、Dr.Memory)和Linux 专业工具(ASan 、heaptrack)
linux·c++·windows·asan·dr.memory·c++内存泄漏检测·c++内存管理
浅念-1 小时前
C语言小知识——指针(3)
c语言·开发语言·c++·经验分享·笔记·学习·算法
Hcoco_me1 小时前
大模型面试题84:是否了解 OpenAI 提出的Clip,它和SigLip有什么区别?为什么SigLip效果更好?
人工智能·算法·机器学习·chatgpt·机器人
BHXDML2 小时前
第九章:EM 算法
人工智能·算法·机器学习
紫雾凌寒2 小时前
【 HarmonyOS 面试题】2026 最新 ArkTS 语言基础面试题
华为·面试·程序员·华为云·职场发展·harmonyos·arkts
却道天凉_好个秋2 小时前
目标检测算法与原理(三):PyTorch实现迁移学习
pytorch·算法·目标检测
无限进步_3 小时前
【C++】大数相加算法详解:从字符串加法到内存布局的思考
开发语言·c++·windows·git·算法·github·visual studio
C+-C资深大佬3 小时前
C++ 数据类型转换是如何实现的?
开发语言·c++·算法