【算法】【动态规划】斐波那契数模型

【算法】【动态规划】斐波那契数模型

目录

一、动态规划解题模版

  1. 状态表示:我们一般创建一个一维数组dp,把dp表填满,其中的某一个值就是结果。而状态表示就是指这个dp表中元素的含义;
    1.1. 来源:题目要求,经验+题目要求 ,分析问题的过程中的重复子问题
  2. 状态转移方程:dp[ i ] = ?
  3. 初始化:保证根据状态转移方程填表时不越界
  4. 填表顺序:为了填写当前状态的时候,所需要的状态已经计算过了
  5. 返回值:题目要求 + 状态表示

二、第N个泰波那契数

题目链接:第N个泰波那契数
题目描述:

  • 第四个数是钱三个数的和,第一二三个数定下位0 1 1,返回第n个数


题目解析:

解题思路:

  1. 状态表示:dp[ i ] 表示的 i 个泰波那锲数
  2. 状态转移方程:dp[ i ] = dp[ i - 1] + dp[ i - 2] + dp[ i - 3]
  3. 初始化:dp[ 0 ] = 0, dp[ 1 ]= 1, dp[ 2 ] = 1
  4. 填表顺序:顺序从左向右填表即可
  5. 返回值: dp[ n ]

解题代码:

//时间复杂度:O(N)//空间复杂度:O(N)classSolution{publicinttribonacci(int n){if(n <3)return n ==0?0:1;//创建dp表int[] dp =newint[n +1];//初始化 dp[0]=0; dp[1]= dp[2]=1;//填表for(int i =3; i <= n; i++){ dp[i]= dp[i-1]+ dp[i-2]+ dp[i-3];}//返回值return dp[n];}}

空间优化:只创建长度为三的数组即可:

//时间复杂度:O(N)//空间复杂度:O(1)classSolution{publicinttribonacci(int n){if(n <3)return n ==0?0:1;//创建dp表int[] dp =newint[]{0,1,1};//填表for(int i =3; i <= n; i++){int tmp = dp[0]; dp[0]= dp[1]; dp[1]= dp[2]; dp[2]= tmp + dp[0]+ dp[1];}//返回值return dp[2];}}

三、⾯试题 08.01. 三步问题

题目链接:⾯试题 08.01. 三步问题](https://leetcode.cn/problems/three-steps-problem-lcci/description/)

题目描述:

题目解析:

  • 每一次上楼梯有三个选择: 1 2 3 ,返回走 到第n阶梯 步有多少种走法

解题思路:

  1. 状态表示:dp[ i ] 表示第 i 阶的上楼方式种类数
  2. 状态转移方程:dp[ i ] = dp[ i - 1] + dp[ i - 2] + dp[ i - 3]
  3. 初始化:dp[ 0 ] = 1, dp[ 1 ]= 1, dp[ 2 ] = 2 (小孩有3种走法,那么小孩的上一个台阶的可能就是 i-1, i-2, i-3 )
  4. 填表顺序:顺序从左向右填表即可
  5. 返回值: dp[ n ]

解题代码:

//时间复杂度:O(N)//空间复杂度:O(N)classSolution{publicintwaysToStep(int n){if(n <3)return n;//建立dp表int[] dp =newint[n+1];//初始化 dp[0]= dp[1]=1; dp[2]=2;//填表for(int i =3; i <= n; i++){ dp[i]=((dp[i-1]+ dp[i-2])%1000000007+ dp[i-3])%1000000007;}//返回值return dp[n];}}

四、746. 使⽤最⼩花费爬楼梯(easy)

题目链接:746. 使⽤最⼩花费爬楼梯(easy)

题目描述:

题目解析:

  • 给我们一个cost数组,表示走出这一个台阶需要的花费,
  • 可以选择第一步从cost[ 0 ] 还是 cost [ 1 ]开始。
  • 让我们返回到达楼顶的最小总花费。

解题思路:

  1. 状态表示:dp[ i ] 表示走到第 i 阶的最小花费
  2. 状态转移方程:dp[ i ] = dp[i-1]+cost[i-1] 和 dp[i-2]+cost[i-2] 的较小值
  3. 初始化:表的长度要比cost大1,表示楼顶
  4. 填表顺序:顺序从左向右填表即可
  5. 返回值: dp[ n ]
    解题代码:
//时间复杂度:O(N)//空间复杂度:O(N)classSolution{publicintminCostClimbingStairs(int[] cost){int n = cost.length;if(n ==2)returnMath.min(cost[0],cost[1]);//状态转移表int[] dp =newint[n+1];//状态转移方程for(int i =2; i <= n; i++){ dp[i]=Math.min(dp[i-1]+cost[i-1], dp[i-2]+cost[i-2]);}return dp[n];}}

五、91.解码⽅法

题目链接:91.解码⽅法

题目描述:

题目解析:

  • 给我们一个编码规则,数字1 - 26 对应表示字母A - Z
  • 给我们一个纯数字的字符串,让我们将字符串进行拆分,拆分后的字符串,对应的所有子串都可以对应表示成字母
  • 求可以拆分的种数

解题思路:

  1. 状态表示:dp[ i ] 表示字符串中 0 到 i 字符的合法拆分结果
  2. 状态转移方程:
    2.1. i 位置上字符为 1 到 9 的字符 单独解码成功 dp[ i ] += dp[ i - 1]
    2.2. i 与 i-1位置上的字符组合是 10 到 26 的合法编码 dp[ i ] += dp[ i-2 ]
  3. 初始化:
    3.1. dp[ 0 ] :第一个字符不为0,就dp[ 0] = 1,为0就返回0
    3.2. dp[ 1 ]:该字符不为0,dp[ 1 ] += dp[ 0 ],与第0个字符组成合法编码10 - 26 ,dp[ 1 ] += 1;

填表顺序:从左到右
返回值:dp[ n-1 ]

解题代码:

classSolution{publicintnumDecodings(String s){//前导0if(s.charAt(0)=='0')return0;int n = s.length();char[] ch = s.toCharArray();//只有一个字符if(n ==1)return1;int[] dp =newint[n];//初始化 dp[0]=1;//初始化第二个元素if(ch[1]!='0'&& ch[0]!='0') dp[1]+=1;int t =(ch[1]-'0')+(ch[0]-'0')*10;if(t >=10&& t <=26) dp[1]+=1;//填表for(int i =2; i < n; i++){//该字符单独组if(ch[i]!='0') dp[i]+= dp[i-1];//与前一个字符组 t =(ch[i]-'0')+(ch[i-1]-'0')*10;if(t >=10&& t <=26) dp[i]+= dp[i-2];}return dp[n-1];}}

Read more

Java 大视界 -- Java 大数据在智能家居能源消耗趋势预测与节能策略优化中的应用(433)

Java 大视界 -- Java 大数据在智能家居能源消耗趋势预测与节能策略优化中的应用(433)

Java 大视界 -- Java 大数据在智能家居能源消耗趋势预测与节能策略优化中的应用(433) * 引言: * 正文: * 一、智能家居能源管理的核心痛点与 Java 大数据的价值 * 1.1 行业核心痛点(基于《2024 中国智能家居行业白皮书》) * 1.2 Java 大数据的核心价值(实战验证适配性) * 二、技术架构设计实战(纵向架构图) * 2.1 核心技术栈选型(生产压测验证版) * 2.2 关键技术亮点(博主实战总结) * 三、核心场景实战(附完整可运行代码) * 3.1 场景一:能耗趋势预测(线性回归 + LSTM 融合模型) * 3.1.1 业务需求 * 3.1.

By Ne0inhk
必收藏!小白也能懂:Agent、Skills、MCP和A2A大模型架构完全指南

必收藏!小白也能懂:Agent、Skills、MCP和A2A大模型架构完全指南

文章详解AI Agent四大核心概念:Agent作为智能决策主体,Skills提供原子化能力封装,MCP实现标准化工具调用,A2A支持Agent间协作。这些技术共同构建了从单Agent自主执行到多Agent协同工作的完整技术栈,解决了智能体的自主性、模块化能力、工具调用和互操作等核心问题,助力开发者快速构建专业级AI应用。 一、Agent、Skills、MCP和A2A的核心概念总览 1、Agent (代理/智能体):自主决策与执行的“大脑”。 AI Agent是2026年AI生态的核心概念,是基于人工智能技术构建的、具备感知环境、理解信息、自主推理决策、自主规划与执行动作并持续与环境/其他主体交互,以自主达成预设或动态生成目标的数字智能实体。2026年的智能体不是在回答问题,而是在完成任务。其突破了传统问答式、生成式AI的能力边界,可像人类员工一样独立处理复杂综合性任务。它以大模型为核心引擎,整合规划、记忆、工具调用与行动执行四大能力,形成「感知 - 认知 - 决策 - 执行 - 反馈」的完整智能闭环,

By Ne0inhk
Kafka架构:构建高吞吐量分布式消息系统的艺术

Kafka架构:构建高吞吐量分布式消息系统的艺术

目录 * Kafka架构:构建高吞吐量分布式消息系统的艺术 * 引言:探索Kafka的宇宙 * Kafka核心概念与架构总览 * 什么是Kafka? * Kafka的核心架构组件 * Kafka的数据模型 * ZooKeeper在Kafka架构中的关键作用 * ZooKeeper的核心职责 * ZooKeeper的数据结构 * ZooKeeper集群配置 * Controller机制 * Kafka的分区与复制机制 * 分区策略 * 自定义分区器 * 复制机制与ISR * 分区分配策略 * Kafka的存储机制 * 日志存储结构 * 高效的存储设计 * 日志清理策略 * Kafka的消费模型 * 消费者组与重平衡 * ZooKeeper在消费者协调中的作用 * 消费者实现 * Kafka性能调优与最佳实践 * ZooKeeper性能优化 * Bro

By Ne0inhk
ZeroClaw Reflex UI完整搭建流程——ZeroClaw Gateway + LM Studio + Reflex 本地 AI 管理面板

ZeroClaw Reflex UI完整搭建流程——ZeroClaw Gateway + LM Studio + Reflex 本地 AI 管理面板

🦀 ZeroClaw Reflex UI 完整搭建流程 ZeroClaw Gateway + LM Studio + Reflex 本地 AI 管理面板 2026 年 2 月 相似项目部署参考: 【OpenClaw 本地实战 Ep.1】抛弃 Ollama?转向 LM Studio!Windows 下用 NVIDIA 显卡搭建 OpenClaw 本地极速推理服务 【OpenClaw 本地实战 Ep.2】零代码对接:使用交互式向导快速连接本地 LM Studio 用 CUDA GPU 推理 【OpenClaw 本地实战 Ep.3】突破瓶颈:强制修改

By Ne0inhk