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

leetcode:面试题 08.01. 三步问题

题目链接

        面试题 08.01. 三步问题 - 力扣(LeetCode)

题目描述

解法一:

int waysToStep(int n) {// dp[i]--->爬到第i阶楼梯的最大方式// dp[i] = dp[i-1] + dp[i-2] + dp[i-3];if(n == 1) return 1;if(n == 2) return 2;if(n == 3) return 4;vector<int> dp(n+1);dp[1] = 1;dp[2] = 2;dp[3] = 4;// dp[4] = 7; dp[5] = dp[4] + dp[3] + dp[2] = 13;for(int i = 4; i <= n; i++){dp[i] = ((dp[i-1] + dp[i-2]) % MOD + dp[i-3]) % MOD;}return dp[n];
}

解法二:

// dp[i][1]--->从上一个台阶进入此台阶,爬楼梯的最大方式
// dp[i][2]--->从上二个台阶进入此台阶,爬楼梯的最大方式
// dp[i][3]--->从上三个台阶进入此台阶,爬楼梯的最大方式int waysToStep(int n) {if(n == 1) return 1;if(n == 2) return 2;if(n == 3) return 4;vector<vector<int>> dp(n+1,vector<int>(4));dp[1][1] = 1; dp[1][2] = 0; dp[1][3] = 0;dp[2][1] = 1; dp[2][2] = 1; dp[2][3] = 0;dp[3][1] = 2; dp[3][2] = 1; dp[3][3] = 1;for(int i = 4; i <= n; i++){dp[i][1] = ((dp[i-1][1] + dp[i-1][2]) % MOD + dp[i-1][3]) % MOD;dp[i][2] = ((dp[i-2][1] + dp[i-2][2]) % MOD + dp[i-2][3]) % MOD;dp[i][3] = ((dp[i-3][1] + dp[i-3][2]) % MOD + dp[i-3][3]) % MOD;}return ((dp[n][1] + dp[n][2]) % MOD + dp[n][3]) % MOD;}

解法分析

  1. 解法1与解法2比较之下,肯定是解法1更加合适,方便
  2. 两种解法都是采用动态规划思想去解决问题,也就是说采用动态规划方法去解决问题时,不止一种思考方式
  3. 动态规划法去解决问题时,宏观逻辑是,利用计算机的记忆,把每种情况都记住,然后一步步迭代,这次迭代的过程,依赖上次迭代的结果,上次迭代的结果被计算机存储了。
  4. 可以说动态规划是在一步步的暴力穷举,只有走了第一步,才能走好第二步。只有走了第二步,才能走好第三步
  5. 动态规划在记什么:在记状态,你决定如何考虑状态,就决定你要怎么走
  6. 最好怎么考虑状态:状态最少的状态,就是解决问题最好的状态

解法三:递归法

//方法三:但是测试99时已经超出时间显示int dfs(int n){if(n == 1) return 1;if(n == 2) return 2;if(n == 3) return 4;int n1 = dfs(n-1);int n2 = dfs(n-2);int n3 = dfs(n-3);return n1 + n2 + n3;}int waysToStep(int n) {return dfs(n);}

解法分析

  1. 纯递归也可以解决问题,仅仅只是数据量太大时,超过时间限制而已
  2. 也就是说,动态规划是解决该问题的一个方法,也可以用其它方法来解决问题
  3. 也就是说这道题不是动态规划本身,动态规划算法是解决这道题的一个方法
  4. 也就是说这道题,利用了计算机的存储结构,这是计算机对动态规划算法做出的贡献
  5. 人脑决定了计算机存储什么,这是人脑对动态规划算法做出的贡献
  6. 人脑根据如何分类状态,决定如何计算机如何存储数据
  7. 也就是说动态规划算法== 人脑根据智力分类状态 + 计算机存储状态 + 计算机迭代
http://www.lqws.cn/news/478117.html

相关文章:

  • AWS认证系列:考点解析 - cloud trail,cloud watch,aws config
  • JavaEE-Mybatis初阶
  • ubuntu24.04+5090显卡驱动安装踩坑
  • C4.5算法深度解析:决策树进化的里程碑
  • 低空经济三大赛道深度解析:交通、安防、能源领域的革命性突破
  • 华为公布《鸿蒙编程语言白皮书》V1.0 版:解读适用场景
  • es中向量索引的增量更新
  • Linux:早期操作系统的系统调用
  • 【论文阅读笔记】TransparentGS:当高斯溅射学会“看穿”玻璃,如何攻克透明物体重建难题?
  • Day56打卡 @浙大疏锦行
  • 【threejs】一天一个小案例讲解:控制面板(GUI)
  • 扩散模型与强化学习(1):字节Seedance中的人类偏好优化实践
  • 华为云Flexus+DeepSeek征文|基于Dify构建解析网页写入Notion笔记工作流
  • sqlite3 数据库反弹shell
  • 开发语言本身只是提供了一种解决问题的工具
  • 【AI智能体】Spring AI MCP 服务常用开发模式实战详解
  • TDengine 3.3.5.0 新功能——服务端查询内存管控
  • PaddleOCR + Flask 构建 Web OCR 服务实战
  • Flink Sink函数深度解析:从原理到实践的全流程探索
  • 63-Oracle LogMiner(23ai)-实操
  • 合成生物学与人工智能的融合:从生命编程到智能设计的IT新前沿
  • 华为云Flexus+DeepSeek征文|在Dify-LLM平台中开发童话故事精灵工作流AI Agent
  • Kafka动态配置深度解析
  • 测试用例原则之 FIRST/CORRECT/5C原则
  • 论文笔记:Large language model augmented narrative driven recommendations
  • 学习设计模式《十四》——组合模式
  • [计算机网络] 局域网内的网络传输
  • #### es相关内容的索引 ####
  • 【期末笔记】高频电子线路
  • 双向长短期记忆网络(BiLSTM)