动态规划--状态转移

news2024/10/1 19:34:13

解码方法

1.题目

2.思路

1)我们定义一个数组dp,其中dp[i]表示字符串s的前i个字符的解码方法总数。初始化时,dp[0]为1,因为空字符串有一种解码方式。dp[1]的值取决于第一个字符是否是'0',如果不是'0',则有一种解码方式,否则没有解码方式。

2)从第三个字符开始遍历字符串s(即i从2开始)。对于每个字符,我们考虑两种可能的解码方式:

  1. 单独解码最后一个字符:如果当前字符不是'0',则它可以单独解码成一个字母。因此,我们可以将dp[i]增加dp[i-1],因为这意味着我们保持之前的解码方式不变,并在末尾添加一个新的解码字符。

  2. 组合解码最后两个字符:我们检查最后两个字符组成的数字是否在10到26之间。如果是,这两个字符可以组合起来解码成一个字母。在这种情况下,我们可以将dp[i]增加dp[i-2],因为这意味着我们不考虑最后一个字符,而是将最后两个字符作为一个整体进行解码,并加上之前的解码方式数。

在遍历完整个字符串后,dp[n](其中n是字符串s的长度)将包含整个字符串的解码方法总数。

3.代码

import java.util.Scanner;

public class jiema {
	//定义方法numDecodings,接收一个字符串s作为参数,返回解码方法的总数
	public int numDecodings(String s) {
		if(s==null || s.length()==0 || s.charAt(0)=='0') {
			return 0;
		}
		
		//定义dp数组,dp[i]表示s的前i个字符的解码方法总数
		int n=s.length();
		int[] dp = new int[n+1];
		
		//空字符串有一种解码方式
		dp[0]=1;
		//第一个字符如果不是‘0’,则有一种解码方式,否则没有
		dp[1]=s.charAt(0)!='0'?1:0;
		//从第二个字符开始遍历字符串s
		for(int i=2;i<=n;i++) {
			//情况1:单独解码最后一个字符
			//如果当前字符不是'0',则可以单独解码成一个字母
			if(s.charAt(i-1)!='0') {
				dp[i]+=dp[i-1];
			}
			
			//情况2:组合解码最后两个字符
			//取最后两个字符组成的数字
			int twoDigit = Integer.parseInt(s.substring(i-2,i));
			
			//如果这个数字在10-26之间,则可以组合解码成一个字母
			if(twoDigit >= 10&&twoDigit <=26) {
				dp[i]+=dp[i-2];
			}
		}
		return dp[n];
		
	}
	
	public static void main(String[] args) {
		//创建对象
		jiema solution=new jiema();
		Scanner scanner=new Scanner(System.in);
		String s=scanner.nextLine();
		scanner.close();
		//调用numDecodings方法
		int result = solution.numDecodings(s);
		System.out.println(result);
		
	}
}

4.知识

1)s.charAt(0)

在Java中,s.charAt(0) 是一个方法调用,用于获取字符串 s 中位于索引 0 的字符。在Java中,字符串是字符的序列,并且索引是从 0 开始的。因此,s.charAt(0) 会返回字符串 s 的第一个字符。

例如,如果有一个字符串 s = "hello",那么 s.charAt(0) 将返回字符 'h'

这里是 s.charAt(0) 的一些要点:

  • 如果字符串 s 是空的(即 s.length() == 0),那么调用 s.charAt(0) 会抛出一个 StringIndexOutOfBoundsException,因为索引 0 不存在。
  • 如果 s 是 null,那么调用 s.charAt(0) 将会抛出一个 NullPointerException,因为你不能在 null 对象上调用方法。

因此,在调用 s.charAt(0) 之前,通常最好检查字符串 s 是否为空或 null,以避免这些异常。

2)int twoDigit = Integer.parseInt(s.substring(i-2,i));

Integer.parseInt() 方法用于将字符串参数作为有符号的十进制整数进行解析。如果字符串参数以有效的十进制数字序列开始,则该方法将返回该序列表示的整数。

在代码 int twoDigit = Integer.parseInt(s.substring(i-2, i)); 中,s.substring(i-2, i) 创建了一个从字符串 s 的 i-2 位置开始(包含)到 i 位置结束(不包含)的子字符串。这个子字符串包含了 s 的最后两个字符。

3)   Scanner scanner=new Scanner(System.in);
        String s=scanner.nextLine();
        scanner.close();

从键盘获取字符串的代码,导入包import java.util.Scanner;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1472238.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity—MVC分层开发思想

每日一句&#xff1a;当你不努力的时候&#xff0c;天赋就会一点一点被收回 目录 MVC分层开发思想 MVC是什么 MVC的开发步骤 案例&#xff1a;点击按钮实现金币进行添加&#xff0c;并且把金币记录到JSON里 MVC模式实现 背包系统基础代码 背包项目实现步骤 MVC分层开发思…

第十三天-mysql交互

目录 1.安装MySQL connector 方式1&#xff1a;直接安装 方式2&#xff1a;下载 2.创建链接 3.游标Cursor 4.事务控制 5. 数据库连接池 1. 使用 6.循环执行SQL语句 不了解mysql的可以先了解mysql基础 1.安装MySQL connector 1. MySQL connector 是MySQL官方驱动模块…

VirtualBox+Vagrant安装linux

一、VirtualBox安装 VirtualBox官网&#xff1a;Oracle VM VirtualBox 这里采用VirtualBox--7.0.0 版本 二、Vagrant安装 Vagrant官网&#xff1a;Vagrant by HashiCorp Vagrant镜像仓库&#xff1a;Discover Vagrant Boxes - Vagrant Cloud 这里采用Vagrant--2.4.1版本 在…

Python从入门到精通指南【第101篇—入门到精通】【文末送书-24】

文章目录 Python从入门到精通指南第一步&#xff1a;入门基础1.1 安装Python1.2 Hello World1.3 变量和数据类型1.4 控制流程 第二步&#xff1a;深入学习2.1 函数和模块2.2 列表、元组和字典2.3 文件操作 第三步&#xff1a;高级主题3.1 面向对象编程3.2 异常处理3.3 正则表达…

猫头虎分享已解决Bug || 无效的请求参数:InvalidRequestException

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

DP读书:《工程热力学(第二版)》(一)绪论——能量及其利用

DP读书&#xff1a;《工程热力学&#xff08;第二版&#xff09;》绪论 0.1 能量及其利用 热力学——研究对象&#xff1a;能量 能量 物质能量传递 普遍规律 能源&#xff1a;直接提供能量的物质资源 一次能源&#xff1a;热能占比85% 直接利用——>冶金、采暖、炊煮 …

全网最全AI绘画工具汇总(二)

一.AI绘画 图像 创造人工智能艺术的方式共有多种方法&#xff0c;包括使用数字模式的程序“基于规则”的图像生成、模拟笔触和其他绘画效果的算法&#xff0c;以及人工智能或深度学习算法等。 最早的重要人工智能艺术系统之一是AARON&#xff0c;由哈罗德科恩于1960年代末开…

PureFlash v1.9.1特性介绍

PureFlashv1.9.1版本特性主要有3个&#xff1a; 1. 支持RDMA网络 使用RDMA协议可以大大减少对CPU的消耗&#xff0c;性能提升30%以上。 PureFlash的网络配置分为存储节点间网络&#xff08;存储后端网&#xff09;和客户端网络&#xff08;前端网&#xff09;。都支持使用RD…

使用vuetify实现全局v-alert消息通知

前排提示&#xff0c;本文为引流文&#xff0c;文章内容不全&#xff0c;更多信息前往&#xff1a;oldmoon.top 查看 简介 使用强大的Vuetify开发前端页面&#xff0c;结果发现官方没有提供简便的全局消息通知组件&#xff08;像Element中的ElMessage那样&#xff09;&#xf…

桶装水配送小程序有什么功能 怎么制作

桶装水配送小程序是一种方便快捷的订水服务工具&#xff0c;可以帮助用户轻松订购桶装水&#xff0c;并实时跟踪订单配送情况。下面具体介绍送水小程序的功能。 1. 客户订水功能&#xff1a;用户可以通过小程序轻松选择需要的桶装水数量和配送时间&#xff0c;填写联系信息和地…

【AI Agent系列】【MetaGPT多智能体学习】0. 环境准备 - 升级MetaGPT 0.7.2版本及遇到的坑

之前跟着《MetaGPT智能体开发入门课程》学了一些MetaGPT的知识和实践&#xff0c;主要关注在MetaGPT入门和单智能体部分&#xff08;系列文章附在文末&#xff0c;感兴趣的可以看下&#xff09;。现在新的教程来了&#xff0c;新教程主要关注多智能体部分。 本系列文章跟随《M…

【VTKExamples::PolyData】第三十八期 Outline

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 前言 本文分享VTK样例Outline,并解析接口vtkOutlineFilter,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO 1. Outline // Create…

DP读书:《半导体物理学(第八版)》(一)绪论 3min速通

DP读书&#xff1a;《半导体物理学&#xff08;第八版&#xff09;》刘恩科 3min速通半导体物理之绪论 DP读书&#xff1a;《半导体物理学&#xff08;第八版&#xff09;》刘恩科绪论第一章 半导体中的电子状态1.1 半导体的晶格结构和结合性质1.1.1 金刚石型结构和共价键1.1.2…

docker下gitlab安装配置

一、安装及配置 1.gitlab镜像拉取 docker pull gitlab/gitlab-ce:latest2.运行gitlab镜像 docker run -d -p 443:443 -p 80:80 -p 222:22 --name gitlab --restart always --privilegedtrue -v /home/gitlab/config:/etc/gitlab -v /home/gitlab/logs:/var/log/gitlab -v …

SAP MD81创建客户独立需求简介

正常我们用的最多的计划独立需求都是使用的是MD61 ,今天我们说下SAP的另外的一个标准功能客户独立需求MD81。虽然SAP给这个TCODE的描述是客户独立需求,但是实际是没有地方去关联对应的客户信息的。或者可以理解为是一个关联销售订单的一个计划独立需求。 1、MD81在SAP中的路…

交换两个整数

交换两个整数 题目描述&#xff1a;解法思路&#xff1a;解法代码&#xff1a;运行结果&#xff1a; 题目描述&#xff1a; 写⼀个函数Swap&#xff0c;可以交换两个整数的内容。注意必须实现成函数完成。 输入2个整数&#xff0c;调用自定义函数Swap&#xff0c;完成2个整数的…

赵本山念王小利写给李琳的信真费劲,原来不会写的字就打个圈(零)

赵本山念王小利写给李琳的信真费劲&#xff0c;原来不会写的字就打个圈&#xff08;零&#xff09; --小品《同桌的你》&#xff08;中3&#xff09;的台词 王小利&#xff1a;多亏桂琴给我帮助&#xff0c;借我铅笔给我橡皮&#xff0c;考试时候让我抄题&#xff0c; 赵本山&…

【Java程序设计】【C00287】基于Springboot的疫情防控期间某村外出务工人员管理系统(有论文)

基于Springboot的疫情防控期间某村外出务工人员管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的疫情防控期间某村外出务工人员信息管理系统 本系统分为系统功能模块、管理员功能模块、用户功能模块、采集…

6.3 认证授权模块 - 用户认证

认证授权模块 - 用户认证 文章目录 认证授权模块 - 用户认证一、用户认证 基础1.1 连接数据库认证1.1.0 用户表 xc_user1.1.1 分析1.1.2 安全管理配置 WebSecurityConfig1.1.3 自定义UserDetailsService1.1.4 授权服务器配置 AuthorizationServer 1.2 扩展用户身份信息1.2.1 修…

【JavaScript 漫游】【022】事件模型

文章简介 本篇文章为【JavaScript 漫游】专栏的第 022 篇文章&#xff0c;对 JavaScript 中事件模型相关的知识点进行了总结。 监听函数 浏览器的事件模型&#xff0c;就是通过监听函数&#xff08;listener&#xff09;对事件做出反应。事件发生后&#xff0c;浏览器监听到…