算法王冠上的明珠——动态规划之斐波那契数列问题(第二篇)

算法王冠上的明珠——动态规划之斐波那契数列问题(第二篇)

目录

1. LeetCode746. 使用最小花费爬楼梯

2. LeetCode91. 解码方法


今天我们继续来聊一聊动态规划的斐波那契数列类型的题目

1. LeetCode746. 使用最小花费爬楼梯

这个题目的话也是比较简单的。就是要求我们计算在可以一次走一步或者两步的情况下,到达结尾时的最小消耗。

所以在这道题里面它的状态表示就是走到当前位置的值的最小消耗。

所以在这道题里面它的状态转移方程就是dp[i]=min(dp[i-1],dp[i-2])+c[i]。

它的初始化就是第0个位子设置为c[0],第一个位置设置为c[1]。(怎么设置是因为我们是不知道开始的那个位置的大小,而且因为我们的状态转移方程需要依靠前两个位置的值,所以我们在这里就直接初始化前两个)。

填表顺序就是从前往后就好。

返回值就是dp表第sz-1个位置的值和第sz-2个位置的值的最小值。

class Solution { public: int minCostClimbingStairs(vector<int>& c) { int sz=c.size(); vector<int> dp(sz+1); dp[0]=c[0]; dp[1]=c[1]; for(int i=2;i<sz;++i) { dp[i]=min(dp[i-1],dp[i-2])+c[i]; } return min(dp[sz-1],dp[sz-2]); } };

2. LeetCode91. 解码方法

这道题的话就是说,现在给一个数组,然后不同的数字可以代表不同的字母,可以单个字母,也可以两个字母拼在一起,然后要求我们返回这个数组可以组成的不同的字母串的数量。

这道题的话不难,就是多了一些细节上的判断。

在这道题里面它的状态表示就是以当前位置为结尾的字母串数量的最大值。

在这道题里面它的状态转移方程就需要分条件来判断了,如果当前位置不为0的话,那么就先dp[i]+=dp[i-1],然后如果可以和前面一个数字组成大于9并且小于27的数的话,那么dp[i]再+=dp[i-2]。(这边之所以需要判断两遍是因为当前位置为结尾和当前数加上前一个数一起作为结尾,所以需要计算两遍)

]它的初始化就是通过判断的方式来先初始化前面两个数。

填表顺序就是从前往后就好。

返回值就是dp表第sz-1个位置的值就好。(因为必须是所有数字全部用上)

class Solution { public: int numDecodings(string s) { int sz=s.size(); vector<int> dp(sz); if(s[0]!='0') dp[0]=1; else return 0; if(sz==1) return 1; if(s[1]!='0') dp[1]+=dp[0]; if((s[0]-'0')*10+s[1]-'0'<27) dp[1]++; for(int i=2;i<sz;++i) { if(s[i]!='0') dp[i]+=dp[i-1]; if(((s[i-1]-'0')*10+s[i]-'0')<27&&((s[i-1]-'0')*10+s[i]-'0')>9) dp[i]+=dp[i-2]; } return dp[sz-1]; } };

Read more

飞算JavaAI让新手上手速度提升50%:知识沉淀成本归零!

飞算JavaAI让新手上手速度提升50%:知识沉淀成本归零!

翻开你的 Coding 记忆,是否还记得那些曾经火爆一时,如今却渐渐淡出视野的“古老”技术?前端刚入行时,你可能满怀热情地钻研 JQuery,写着繁琐的前端代码,如今已被 Vue、React 等新宠取代;后端或许从 PHP 的“天下第一”,到如今 Spring Boot、FastAPI 的微服务潮流…… 技术迭代的速度快得让人措手不及,昨天还是必备技能,今天可能就成了"上古知识"。 如今,AIGC 已经是大行其道了,文字、图片、视频,还有程序员的 coding... 新手都是通过大量的练习、试错、修改bug、知识整理慢慢成长起来的,今天我为大家分享一个AI时代的代码开发效率工具----飞算JavaAI。 我学习新的框架和工具都是从官网开始的,因为这里是有最权威最新的信息。 1. 飞算JavaAI是啥? 飞算JavaAI是飞算科技发布的专为Java开发者设计的智能开发助手,作为唯一获得中国信通院认证的同类工具,它区别于传统代码补全工具的核心在于能够生成完整、

Java赋能社区:跑腿家政上门服务商城

Java赋能社区:跑腿家政上门服务商城解决方案 一、系统定位与核心价值 跑腿家政上门服务商城是基于Java技术栈打造的社区O2O服务平台,整合跑腿代办、家政服务、维修安装等本地生活服务,通过数字化手段解决社区居民"最后一公里"服务需求,同时为服务人员提供灵活就业机会。 二、技术架构设计 1. 微服务架构 mermaid graph TD A[API网关] --> B[用户服务] A --> C[服务人员服务] A --> D[订单服务] A --> E[支付服务] A --> F[评价服务] A -->

详解Java之Spring MVC篇一

详解Java之Spring MVC篇一

目录 Spring MVC 官方介绍 MVC RequestMapping 传递参数  无参数 单个参数 针对String类型  针对Integer类型 针对int类型 针对自定义类型 多个参数 参数重命名 参数强制一致 参数不强制一致 传递数组 编辑传递List 编辑 传递JSON 编辑 从路径中获取参数 获取单个参数  获取多个参数 编辑 上传文件 Spring MVC 官方介绍 翻译: Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。它的正式名称“Spring Web MVC”来⾃其源模块的名称(

【Java String】类深度解析:从原理到高效使用技巧

【Java String】类深度解析:从原理到高效使用技巧

🎁个人主页:User_芊芊君子 🎉欢迎大家点赞👍评论📝收藏⭐文章 🔍系列专栏:【Java】内容概括 【前言】 在 Java 编程中,String 类是使用频率最高的类之一,也是初学者接触最早的引用类型之一。但正是因为其基础且常用,很多开发者往往忽略了它的底层原理和高级特性。本文将从 String 类的底层实现、核心方法到性能优化、常见误区,全方位解析 Java String 类,帮你彻底搞懂这一基础却关键的类。 文章目录: * 一、String类本质特征 * 1.String类定义 * 2.字符串创建及内存机制 * 3.字符串常量池(StringTable) * 二、String 类核心方法 * 1.字符串方法比较 * 1.1“==”比较是否引用同一个对象 * 1.2 equals