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

动态规划简单题2

leetcode91题(解码方法)

 分析题目:

1.这是一种解码,就是给多个数字组成的字符串,把这些数字解码成字母,看看一共有多少种

2.如果一个数字前有前导0就不合法,比如06,这与6不同,所以06不能解码

算法原理:

状态表示:经验+题目(以i位置为结尾时,巴拉巴拉)

根据题目,状态就是以i位置为结尾时,一共有多少总解码方式

所以dp[i]:以i结尾时有多少总解码方式

状态转移方程:根据最近的一步,划分问题

成功与失败都有可能,所以最后的dp[i]编写代码时要注意 

 初始化:保证填表时不会越界

根据状态方程我们看出0和1可能会越界,所以我们需要单独填0/1的位置,0的位置就是一个字符,那它如果是1<=a<=9的化就是合法的,dp[0]:表示的是以0位置为结尾,总的解码方法

1可以自己画图理解以下

填表顺序:

从左往右

返回值:

dp[n-1] 

代码编写

 细节问题:

有没有发现我们的初始化很繁琐

这里介绍处理边界问题和初始化的技巧:

如果觉得初始化0和1的位置很繁琐,那就多开一个空间,让0的位置没用

但注意:要保证后面的填表是正确的,比如你填2位置的时候,2是进入循环填的,如果你一开始0的位置初始化为0,2的填表就可能出错,dp[2]=dp[1]+dp[0];这时候即使你组合和单独都解码成功,2都会填成1;所以我们要注意一开始0的位置要初始化为1才能保证后面填表正确

要注意下标的映射关系,dp[i-1]=s[i];找解码方式的时候要注意dp和s下标映射关系

http://www.xdnf.cn/news/3414.html

相关文章:

  • 算法-堆、排序算法、矩阵乘法
  • 面试手撕——迭代法中序遍历二叉树
  • 负载均衡深度实践:基于Nginx+Keepalived的高可用方案与Zabbix监控设计
  • Cesium Entity动态更新
  • 嵌入式AI还是一片蓝海
  • Day107 | 147.对链表进行插入排序 | 简单选择、冒泡、直接插入
  • 【专题五】位运算(2)
  • AXI中的out of order和interleaving的定义和两者的差别?
  • OSPF的路由
  • Go-web开发之社区功能
  • Java 中那些奇怪的空指针报错场景及解决方案NullPointerException
  • 【计算机视觉】语义分割:MMSegmentation:OpenMMLab开源语义分割框架实战指南
  • MySQL数据同步之Canal讲解
  • 2025年- H16-Lc124-169.多数元素(技巧)---java版
  • 7.0/Q1,GBD数据库最新文章解读
  • ClackyAI:下一代智能云开发环境的技术革新与实践价值
  • WPF使用依赖注入框架AutoMapper
  • 仿腾讯会议——服务器结构讲解
  • Matlab/Simulink - BLDC直流无刷电机仿真基础教程(四) - PWM调制模拟
  • 后端工程师需要掌握哪些基础技能
  • 机器人--底盘
  • 人才答辩ppt优化技巧_杰青_优青_万人计划青年拔尖人才_青年长江学者ppt制作案例
  • 2025五一杯A题五一杯数学建模思路代码文章教学:支路车流量推测问题
  • 部署.NET6.0 Web API项目到Docker
  • 实现了一个基于寄存器操作STM32F103C8t6的工程, 并实现对PA1,PA2接LED正极的点灯操作
  • npm宿主依赖、宿主环境依赖(peerDependencies)(指由宿主环境提供的依赖)
  • 网络安全防火墙技术有哪些?网络防火墙的主要作用
  • 在ASP.NET MVC中使用Repeater指南
  • 【浅尝Java】Java简介第一个Java程序(含JDK、JRE与JVM关系、javcdoc的使用)
  • Seata服务端回滚事务核心源码解析