喉咙细菌感染吃什么药| 胃酸吃什么药好| 什么叫房颤| 扶他林是什么药| rov是什么意思| 约炮什么意思| 白砂糖和冰糖有什么区别| 天才是指什么生肖| 沉甸甸的爱是什么意思| 三聚磷酸钠是什么东西| 仿制药是什么意思| 红枣为什么要去核煮| 腹泻吃什么药| 甲醛是什么味道| 吃鱼对身体有什么好处| 橘色五行属什么| 尿血是什么病| 有色眼镜是什么意思| 什么是手机号| 农历9月17日是什么星座| 吃什么下奶快下奶多| 二甲双胍不能和什么药一起吃| 今期难过美人关是什么生肖| cif是什么意思| 霍家为什么娶郭晶晶| 行长是什么级别| 唐僧成了什么佛| 气管憩室是什么意思| 心理健康是什么| 不作为什么意思| 地软有什么功效和作用| 吃盐吃多了有什么危害| 梦见把狗打死了是什么意思| 什么是重力| tp是什么意思| 乳房疼痛什么原因| 考科目二紧张吃什么药| 入港是什么意思| girl什么意思| 中伏是什么意思| 代谢慢是什么原因| 维生素b族什么牌子的好| 体寒的女人吃什么能调理好身体| 六腑指的是什么| 深蓝色是什么颜色| 生死离别代表什么生肖| 折耳根什么味道| 经常放响屁是什么原因| 下午右眼跳是什么预兆| 农历3月是什么月| 甲胎蛋白偏高是什么原因| 什么叫物理| 太阳是什么| 口腔溃疡是什么原因引起的| 借您吉言什么意思| 蔡字五行属什么| 寂静的意思是什么| 保家卫国是什么生肖| 十月八号是什么星座| 口扫是什么| 生命线分叉代表什么| 南京大屠杀是什么时候| 吃葛根粉有什么好处| 憨笑是什么意思| 血常规wbc是什么意思| 学无止境是什么意思| 手术后吃什么营养品好| 男人蛋疼是什么原因| 身份证末尾x代表什么| 尿胆原normal是什么意思| 土字生肖有钱收是什么生肖| 为什么喝中药越来越胖| 百香果和什么不能一起吃| 夏吃姜有什么好处| 貔貅和麒麟有什么区别| 什么的海藻| 独生子女证办理需要什么材料| 眼睛长眼屎是什么原因| 小姨的女儿叫什么| 蝙蝠属于什么类| 尿多尿急是什么原因| 嘴唇肿了是什么原因| 白化病是什么病| 伤到骨头吃什么好得快| 吃什么补身体| 妇科彩超主要检查什么| 脉络是什么意思| 寮房是什么意思| 胃经常胀气是什么原因| 大腿外侧是什么经络| 曲苑杂坛为什么停播| 阅后即焚什么意思| 堆堆袜是什么| 缺钙会出现什么症状| 抽脂有什么风险和后遗症| 4月2号什么星座| 牛油果和什么不能一起吃| 六月是什么星座的| 亲额头代表什么意思| 想是什么意思| 女人血虚吃什么补最快| 大姨妈一个月来两次是什么原因| 妊娠是什么| 整编师和师有什么区别| 福禄安康是什么意思| 什么是天葬| 心肌炎是什么病严重吗| 拉钩为什么要上吊| 为什么眉毛越来越少| inr医学上是什么意思| 内热是什么原因引起的| 骡子是什么意思| 心口窝疼挂什么科| 卡其色是什么颜色| 怀孕肚子上长毛是什么原因| 女上位什么意思| oil什么意思| 2018年属什么生肖| 男子精少吃什么药可以生精| 眼镜框什么材质的好| 睡觉磨牙是什么原因引起的| 四川耙耳朵是什么意思| 县委办公室主任是什么级别| 腰椎间盘突吃什么药| 手指发痒是什么原因| 恶露后期为什么是臭的| 蓬灰是什么东西| 手指缝里长水泡还痒是什么原因| 中国反导弹系统叫什么| 孕妇白细胞高是什么原因| 宫寒吃什么药| 尿隐血阳性是什么病| 什么化痰效果最好最快| 什么食物含钾多| 形婚是什么意思啊| 口干舌燥是什么原因引起的| 埋伏牙是什么意思| 心度高血压是什么意思| 什么是老公| 胆囊切除后对身体有什么影响| 信物是什么意思| 什么花是白色的| 骨头坏死是什么感觉| 肝火旺吃什么好| 李白属什么生肖的| 切除扁桃体有什么好处和坏处| 食物链是什么意思| 霸凌是什么意思| 孕吐反应什么时候开始| 回笼觉是什么意思| 武警支队长是什么级别| 鞭炮笋学名叫什么| 距骨在什么位置| 前列腺炎是什么原因引起| 梦见老人去世预示什么| 流泪痣是什么意思| 邂逅什么意思| 口臭是什么原因导致的呢| 检查视力挂什么科| 什么中药治肝病最好| 吃什么降糖| 十月是什么星座| 讨喜是什么意思| 红色药片一般是什么药| 胃粘膜糜烂吃什么药| 什么是会车| 心机是什么意思啊| 条线是什么意思| 刘邦为什么要杀张良| 鞭炮笋学名叫什么| 肌膜炎是什么原因造成的| 梦见男婴儿是什么意思| 胡子发黄是什么原因| 心电图p波代表什么| 更年期是什么意思| 凤字五行属什么| 纸包鸡什么意思| 给产妇送什么礼物好| 善存什么时间吃比较好| 人头什么动| cva医学上是什么意思| 鸡肉煲汤加搭配什么好| 宜五行属什么| 烟雾病是什么| 波立维什么时间吃最好| 喝什么解渴| 眼袋大用什么方法消除| 溢于言表是什么意思| cri是什么意思| 六月十八是什么星座| 心绞痛是什么原因引起的| 梦见已故朋友什么预兆| 膀胱壁增厚毛糙是什么意思| 中午12点是什么时辰| 脑供血不足会导致什么后果| 婚姻宫是什么意思| 什么的流着| 耸是什么意思| 社区医院属于什么级别| 梦见自己吃肉是什么预兆| 耳钉后面的塞子叫什么| 桂圆龙眼有什么区别| lake是什么意思| 青春痘用什么药膏擦最好呢| 什么时候喝咖啡最好| 颈椎压迫神经吃什么药| 梦见自己扫地是什么意思| 牛宝是什么| 云南小黄姜有什么功效| 在家做什么小生意| 为什么叫买东西不叫买南北| 肠道问题挂什么科| 为什么会胆汁反流| 婴儿乳糖不耐受吃什么奶粉| dle是什么意思| 胃炎应该吃什么药| 养胃吃什么食物最好| 鼻窦炎长什么样图片| 川崎病是什么症状| 高同型半胱氨酸血症是什么病| 赤小豆和红豆有什么区别| 胃恶心吃什么药| 妒忌什么意思| 1945年是什么年| 吃什么好排大便| 1943年属什么生肖| 阳历12月是什么星座| 正常人为什么会低血糖| 微恶风寒是什么意思| 为什么会得骨癌| 零七年属什么生肖| 禁欲什么意思| 单脱是什么意思| 眼睛发粘是什么原因| 腋下异味看什么科| 低血糖什么症状有哪些| 骨量减少是什么意思| 三点水的字有什么| 苹果什么时候出新手机| 什么人不宜吃石斛| 湿毒吃什么药最有效| 中药什么时间喝效果最好| 属龙跟什么属相最配| 经期喝酒会有什么危害| 什么男什么女| 龟头脱皮是什么原因| 意字五行属什么| 龟公是什么意思| ami是什么意思| 醒酒器有什么作用| 白发多吃什么可以改善| 什么然而止| 吃什么除湿气| 打呼噜挂什么科室| 涮菜都有什么菜| 寿者相什么意思| 猪脚炖什么好吃| 头昏脑胀是什么原因| br什么意思| 神戳戳是什么意思| 红萝卜什么时候种| 春天有什么特点| 金牛座是什么象星座| 杨五行属什么| 百度

全国人民代表大会常务委员会工作报告

百度   3月24日,商洛市委宣传部副部长、市文明办主任李丹锋表示,郭鹏勇救落水女孩的事迹值得点赞,值得大家学习,新时代需要更多的郭鹏。

1.第 N 个泰波那契数

题目链接
泰波那契序列?Tn?定义如下:

T0?= 0, T1?= 1, T2?= 1, 且在 n >= 0?的条件下 Tn+3?= Tn?+ Tn+1?+ Tn+2

给你整数?n,请返回第 n 个泰波那契数?Tn?的值。

示例 1:

输入: n = 4
输出: 4
解释:
T_3 = 0 + 1 + 1 = 2
T_4 = 1 + 1 + 2 = 4

示例 2:

输入: n = 25
输出: 1389537

dp[i]就是第i个泰波那契数

我们这个题直接返回dp[n]就行了

为了保证不出现越界的情况,我们将前3个位置进行初始化,这里题目中已经说了具体初始化为什么
填表的顺序是从左向右进行就行了

class Solution

{

public:

? ? int tribonacci(int n)

? ? {

  

? ? ? ? //处理边界问题(n太小的话是会出现越界的情况的)

? ? ? ? if(n==0)return 0;

? ? ? ? if(n==1||n==2)return 1;

? ? ? ? //1.创建一个dp表

? ? ? ? vector<int>dp(n+1);

  

? ? ? ? //2.初始化

? ? ? ? dp[0]=0,dp[1]=dp[2]=1;

  

? ? ? ? //3.填表

? ? ? ? for(int i=3;i<=n;i++)

? ? ? ? {

? ? ? ? ? ? dp[i]=dp[i-1]+dp[i-2]+dp[i-3];

? ? ? ? }

  

? ? ? ? //4.返回值

? ? ? ? return dp[n];

? ? }

};

可以利用滚动数组进行空间优化
就是创建四个变量然后一直不停的移动
1743162320701.png

class Solution

{

public:

? ? int tribonacci(int n)

? ? {

  

? ? ? ? //处理边界问题(n太小的话是会出现越界的情况的)

? ? ? ? if(n==0)return 0;

? ? ? ? if(n==1||n==2)return 1;

? ? ? ? int a=0,b=1,c=1,d=0;

? ? ? ? //3.填表

? ? ? ? for(int i=3;i<=n;i++)

? ? ? ? {

? ? ? ? ? ? d=a+b+c;

? ? ? ? ? ? //三个指针往右边进行移动操作

? ? ? ? ? ? a=b;

? ? ? ? ? ? b=c;

? ? ? ? ? ? c=d;

? ? ? ? }

? ? ? ? //4.返回值

? ? ? ? return d;

? ? }

};

2.三步问题

题目链接
三步问题。有个小孩正在上楼梯,楼梯有 n 阶台阶,小孩一次可以上 1 阶、2 阶或 3 阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模 1000000007。

示例 1:

输入:n = 3
输出:4
说明: 有四种走法

示例 2:

输入:n = 5
输出:13

提示:

  1. n 范围在[1, 1000000]之间

这里我们的dp[i]分成三种情况
从[i-1]位置走一步到[i]位置 dp[i-1]种方法
从[i-2]位置走两步到[i]位置 dp[i-2]种方法
从[i-3]位置走三步到[i]位置 dp[i-3]种方法

dp[i]=dp[i-1]+dp[i-2]+dp[i-3]

初始化:保证不越界
先将前三个进行初始化操作

dp[1]=1
dp[2]=2
dp[3]=4

class Solution

{

public:

? ? int waysToStep(int n)

? ? {

  

? ? ? ? const int MOD=1e9+7;

  
  

? ? ? ? //创建一个dp表

? ? ? ? vector<int>dp(n+1);

  

? ? ? ? //边界条件处理

? ? ? ? if(n==1||n==2)return n;

? ? ? ? if(n==3)return 4;

? ? ? ? //填表之前进行一个初始化操作

? ? ? ? dp[1]=1,dp[2]=2,dp[3]=4;

  
  

? ? ? ? //开始填表

? ? ? ? for(int i=4;i<=n;i++)

? ? ? ? ? ? dp[i]=((dp[i-1]+dp[i-2])%MOD+dp[i-3])%MOD;//每次做加法的时候取模,防止越界操作了

? ? ? ? //确定返回值

? ? ? ? return dp[n];

  

? ? }

};

这里也可以使用滚动数组优化操作

3.使用最小花费爬楼梯

使用最小花费爬楼梯
给你一个整数数组?cost?,其中?cost[i]?是从楼梯第?i?个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。

你可以选择从下标为?0?或下标为?1?的台阶开始爬楼梯。

请你计算并返回达到楼梯顶部的最低花费。

示例 1:

输入: cost = [10,15,20]
输出: 15
解释: 你将从下标为 1 的台阶开始。

  • 支付 15 ,向上爬两个台阶,到达楼梯顶部。
    总花费为 15 。

示例 2:

输入: cost = [1,100,1,1,1,100,1,1,100,1]
输出: 6
解释: 你将从下标为 0 的台阶开始。

  • 支付 1 ,向上爬两个台阶,到达下标为 2 的台阶。
  • 支付 1 ,向上爬两个台阶,到达下标为 4 的台阶。
  • 支付 1 ,向上爬两个台阶,到达下标为 6 的台阶。
  • 支付 1 ,向上爬一个台阶,到达下标为 7 的台阶。
  • 支付 1 ,向上爬两个台阶,到达下标为 9 的台阶。
  • 支付 1 ,向上爬一个台阶,到达楼梯顶部。
    总花费为 6 。

dp[i]标示的是到达i位置的最小花费image.png

初始化
保证填表的时候不越界
我们是需要将dp表前两个位置进行初始化操作
dp[0]和dp[1]都初始化为0

结果返回dp[n]就行了

class Solution

{

public:

? ? int minCostClimbingStairs(vector<int>& cost)

? ? {

? ? ? ? //创建一个dp表

? ? ? ? //2.初始化

? ? ? ? //3.填表

? ? ? ? //4.返回结果

  

? ? ? ? int n=cost.size();

? ? ? ? vector<int>dp(n+1);

? ? ? ? //dp[0]=dp[1]=0; ?我们这里就不需要写了,因为我们在创建dp表的时候已经进行了初始化操作了

  

? ? ? ? for(int i=2;i<=n;i++)

? ? ? ? {

? ? ? ? ? ? dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);

? ? ? ? }

  

? ? ? ? return dp[n];

? ? }

};

解法二:从i位置为起点
dp[i]标示:从i位置出发,到达楼顶,此时的最小花费
image.png
image.png

class Solution

{

public:

? ? int minCostClimbingStairs(vector<int>& cost)

? ? {

? ? ? ? //创建一个dp表

? ? ? ? //2.初始化

? ? ? ? //3.填表

? ? ? ? //4.返回结果

  

? ? ? ? int n=cost.size();

? ? ? ? vector<int>dp(n);

  

? ? ? ? dp[n-1]=cost[n-1];

? ? ? ? dp[n-2]=cost[n-2];

  

? ? ? ? for(int i=n-3;i>=0;i--)

? ? ? ? {

? ? ? ? ? ? dp[i]=cost[i]+min(dp[i+1],dp[i+2]);

? ? ? ? }

? ? ? ? return min(dp[0],dp[1]);

? ? }

};

4.解码方法

解码方法
一条包含字母?A-Z?的消息通过以下映射进行了?编码?:

"1" -> 'A' "2" -> 'B' ... "25" -> 'Y' "26" -> 'Z'

然而,在?解码?已编码的消息时,你意识到有许多不同的方式来解码,因为有些编码被包含在其它编码当中("2"?和?"5"?与?"25")。

例如,"11106"?可以映射为:

  • "AAJF"?,将消息分组为?(1, 1, 10, 6)
  • "KJF"?,将消息分组为?(11, 10, 6)
  • 消息不能分组为??(1, 11, 06)?,因为?"06"?不是一个合法编码(只有 “6” 是合法的)。

注意,可能存在无法解码的字符串。

给你一个只含数字的?非空?字符串?s?,请计算并返回?解码?方法的?总数?。如果没有合法的方式解码整个字符串,返回?0

题目数据保证答案肯定是一个?32 位?的整数。

示例 1:

输入: s = “12”
输出: 2
**解释:**它可以解码为 “AB”(1 2)或者 “L”(12)。

示例 2:

输入: s = “226”
输出: 3
解释: 它可以解码为 “BZ” (2 26), “VF” (22 6), 或者 “BBF” (2 2 6) 。

示例 3:

输入: s = “06”
输出: 0
解释:“06” 无法映射到 “F” ,因为存在前导零(“6” 和 “06” 并不等价)。

提示:

  • 1 <= s.length <= 100
  • s?只包含数字,并且可能包含前导零。

dp[i]表示:以i位置为结尾时,解码方法的总数
image.png
所以我们的状态方程就是dp[i]=dp[i-1]+dp[i-2]
image.png
返回值是dp[n-1]

class Solution

{

public:

? ? int numDecodings(string s)

? ? {

? ? ? ? //创建dp表

? ? ? ? //初始化

? ? ? ? //填表

? ? ? ? //返回值

  

? ? ? ? int ?n=s.size();

? ? ? ? vector<int>dp(n+1);

  

? ? ? ? //初始化一开始的两个位置的dp表

? ? ? ? dp[0]=s[0]!='0';//说明能单独编码

? ? ? ? //处理下边界条件

? ? ? ? if(n==1)return dp[0];//如果只有一个字符的话我们直接返回dp[0]就行了

? ? ? ? if(s[0]!='0'&&s[1]!='0')dp[1]+=1;//第一个位置和第二个位置都能单独编码

  
  

? ? ? ? int t=(s[0]-'0')*10+s[1]-'0';//前两个位置所表示的数

? ? ? ? if(t>=10&&t<=26)dp[1]+=1;

  

? ? ? ? //上面已经将前两个位置初始化好了,现在我们从第三个位置进行初始化操作就行了

? ? ? ? for(int i=2;i<n;i++)

? ? ? ? {

? ? ? ? ? ? if(s[i]!='0')dp[i]+=dp[i-1];//能单独进行编译操作

? ? ? ? ? ? int t=(s[i-1]-'0')*10+s[i]-'0';//第二种情况所对应的数

? ? ? ? ? ? if(t>=10&&t<=26)dp[i]+=dp[i-2];

? ? ? ? }

? ? ? ? return dp[n-1];

  

? ? }

};

这里初始化的长度太长了,我们可以进行优化下
其实就是处理边界问题和初始化问题的技巧

注意事项:
1.虚拟节点里面的值,要保证后面的填表是正确的

2.下标的映射关系
就是将我们的dp表往右边挪动了一位
image.png

class Solution

{

public:

? ? int numDecodings(string s)

? ? {

? ? ? ? //创建dp表

? ? ? ? //初始化

? ? ? ? //填表

? ? ? ? //返回值

  

? ? ? ? int ?n=s.size();

? ? ? ? vector<int>dp(n+1);

  

? ? ? ? //初始化一开始的两个位置的dp表

? ? ? ? dp[0]=1;//虚拟节点初始化为1,保证后面的填表是正确的

? ? ? ? dp[1]=s[1-1]!='0';

? ? ? ? //上面已经将前两个位置初始化好了,现在我们从第三个位置进行初始化操作就行了

? ? ? ? for(int i=2;i<=n;i++)

? ? ? ? {

? ? ? ? ? ? if(s[i-1]!='0')dp[i]+=dp[i-1];//能单独进行编译操作

? ? ? ? ? ? int t=(s[i-2]-'0')*10+s[i-1]-'0';//第二种情况所对应的数

? ? ? ? ? ? if(t>=10&&t<=26)dp[i]+=dp[i-2];

? ? ? ? }

? ? ? ? return dp[n];

  

? ? }

};

这里所有要设计到找之前的字符的,我们都要多减一个1

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Undoom

感谢啦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
血糖高的人早餐吃什么 什么是石斛 轻浮是什么意思 孕妇能喝什么饮料 狮子属于什么科
牙齿过敏吃什么药 肝郁气滞有什么症状 po是什么的缩写 汉武帝是什么朝代 乳房长斑点是什么原因
35岁属什么生肖 水泡长什么样子图片 做hpv检查前要注意什么 西游记是什么生肖 早上起床眼睛浮肿是什么原因
什么可以代替人体润滑油 细菌性阴道炎用什么洗液 老人适合喝什么茶 胸膜炎吃什么药 四菜一汤是什么意思
标的是什么hcv7jop9ns6r.cn 立冬吃什么kuyehao.com 长宽高用什么字母表示hcv9jop0ns0r.cn 猪血不能和什么一起吃hcv8jop0ns9r.cn 高铁为什么没有ehelloaicloud.com
蚊子喜欢叮什么样的人hcv9jop5ns7r.cn 经血颜色淡是什么原因hcv7jop6ns4r.cn 槐花什么时候开花hcv8jop8ns6r.cn 谷维素是什么ff14chat.com 什么的尾巴长不了歇后语hcv8jop6ns2r.cn
糖尿病适合喝什么饮料zsyouku.com 淀粉酶是查什么的hcv7jop9ns6r.cn 送老师什么花好xinmaowt.com 大连是什么海hcv9jop2ns2r.cn 头发一半白一半黑是什么原因hcv7jop5ns6r.cn
直女是什么意思hcv7jop6ns5r.cn 皮肤癣用什么药最好hcv8jop5ns7r.cn 梯是什么意思sanhestory.com 三七花泡水喝有什么功效0297y7.com 阴道炎用什么洗液hcv8jop7ns9r.cn
百度