栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

leetcode 70.爬楼梯 C语言 动态规划

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

leetcode 70.爬楼梯 C语言 动态规划

题目

分析题目

这是典型的动态规划问题,每次可以爬1或2个台阶,让我们求爬到第n阶的方案数,有两种情况,情况一:从n-1阶爬上来。情况二:从n-2阶爬上来;只要把两种情况的方案数相加即可;因此求爬到第n阶的方案数就转换为求爬到第n-1阶和第n-2阶的方案数。

运用动态规划

设计状态:求第n阶的方案数就转移到求第n-1阶和第n-2阶的方案数

写出状态方程:f(n)=f(n-1)+f(n-2);

设定初始状态:f(0)=1; f(1)=1;

执行状态转移

返回最终解

代码段
int climbStairs(int n){
    int f[46]={1,1};           //定义一个存放方案数结果的数组,并且设置初始状态
    int i;
    for(i=2;i<=n;i++)
    {
        f[i]=f[i-1]+f[i-2];    //执行状态转移
    }
    return f[n];

}
时间复杂度和空间复杂度分析

代码共执行n-2次,因此时间复杂度为O(n)

定义了一个数组,因此空间复杂度为O(n)

总结

这道题和斐波那契数列简直一模一样,只是换了一个包装

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/879358.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号