【刷题笔记10.2】LeetCode: 罗马数字转整数

LeetCode: 罗马数字转整数

一、题目描述

在这里插入图片描述

二、分析

方法一:
将给定字符串s中的"IV", “IX”, “XL”, “XC”, “CD”, “CM” 全部替换为其他字符如:a, b, c, d, e, f 这种,然后就可以遍历累加了。

        s = s.replace("IV", "a");s = s.replace("IX", "b");s = s.replace("XL", "c");s = s.replace("XC", "d");s = s.replace("CD", "e");s = s.replace("CM", "f");

方法二:
按照题目的描述,可以总结如下规则:

  • 罗马数字由 I,V,X,L,C,D,M 构成;
  • 当小值在大值的左边,则减小值,如 IV=5-1=4;
  • 当小值在大值的右边,则加小值,如 VI=5+1=6;
  • 由上可知,右值永远为正,因此最后一位必然为正。
    在这里插入图片描述

在代码实现上,可以往后看多一位,对比当前位与后一位的大小关系,从而确定当前位是加还是减法。当没有下一位时,做加法即可。

也可保留当前位的值,当遍历到下一位的时,对比保留值与遍历位的大小关系,再确定保留值为加还是减。最后一位做加法即可。

三、上代码

方法一代码如下:

public static int solution2(String s) {s = s.replace("IV", "a");s = s.replace("IX", "b");s = s.replace("XL", "c");s = s.replace("XC", "d");s = s.replace("CD", "e");s = s.replace("CM", "f");//System.out.println("1111" + s);int result = 0;for (int i = 0; i < s.length(); i++) {int num = getInt2(s.charAt(i));result += num;}return result;}public static int getInt2(char x) {switch (x) {case 'a': return 4;case 'b': return 9;case 'c': return 40;case 'd': return 90;case 'e': return 400;case 'f': return 900;case 'I': return 1;case 'V': return 5;case 'X': return 10;case 'L': return 50;case 'C': return 100;case 'D': return 500;case 'M': return 1000;default: return 0;}}

方法二代码如下:

public int solution1(String s) {int result = 0;int pre = getInt1(s.charAt(0));for (int i = 1; i < s.length(); i++) {int num = getInt1(s.charAt(i));if (pre < num) {result -= pre;} else {result += pre;}pre = num;}result += pre;return result;}public int getInt1(char x) {switch (x) {case 'I': return 1;case 'V': return 5;case 'X': return 10;case 'L': return 50;case 'C': return 100;case 'D': return 500;case 'M': return 1000;default: return 0;}}

方法三自己额外想的方法(直观解法):

public int romanToInt(String s) {int result = 0;for (int i = 0; i < s.length();) {if (s.charAt(i) == 'M') {result = result + 1000;i++;} else if (s.charAt(i) == 'D') {result = result + 500;i++;} else if (s.charAt(i) == 'C') {if ((i + 1 <= s.length() - 1) && s.charAt(i+1) == 'D') {result = result + 400;i = i + 2;} else if ((i + 1 <= s.length() - 1) && s.charAt(i+1) == 'M') {result = result + 900;i = i + 2;} else {result = result + 100;i++;}} else if (s.charAt(i) == 'L') {result = result + 50;i++;} else if (s.charAt(i) == 'X') {if ((i + 1 <= s.length() - 1) && s.charAt(i+1) == 'L') {result = result + 40;i = i + 2;} else if ((i + 1 <= s.length() - 1) && s.charAt(i+1) == 'C') {result = result + 90;i = i + 2;} else {result = result + 10;i++;}} else if (s.charAt(i) == 'V') {result = result + 5;i++;} else if (s.charAt(i) == 'I') {if ((i + 1 <= s.length() - 1) && s.charAt(i+1) == 'V') {result = result + 4;i = i + 2;} else if ((i + 1 <= s.length() - 1) && s.charAt(i+1) == 'X') {result = result + 9;i = i + 2;} else {result = result + 1;i++;}}}return result;}

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

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

相关文章

华为云云耀云服务器L实例评测 | 实例评测使用之体验评测:华为云云耀云服务器管理、控制、访问评测

华为云云耀云服务器L实例评测 &#xff5c; 实例评测使用之体验评测&#xff1a;华为云云耀云服务器管理、控制、访问评测 介绍华为云云耀云服务器 华为云云耀云服务器 &#xff08;目前已经全新升级为 华为云云耀云服务器L实例&#xff09; 华为云云耀云服务器是什么华为云云耀…

Redis 如何实现数据不丢失的?

Redis 实现数据不丢失的关键在于使用了多种持久化机制,以确保数据在内存和磁盘之间的持久性。以下是 Redis 实现数据不丢失的主要方法: 快照(Snapshot)持久化: Redis 使用快照持久化来定期将内存中的数据写入磁盘。快照是一个数据库状态的副本,包含了所有键和与其相关联的…

Linux命令(91)之mv

linux命令之mv 1.mv介绍 linux命令mv是用来移动文件或目录&#xff0c;并且也可以用来更改文件或目录的名字 2.mv用法 mv [参数] src dest mv常用参数 参数说明-f强制移动&#xff0c;不提示 3.实例 3.1.重命名文件1.txt为ztj.txt 命令&#xff1a; mv 1.txt ztj.txt …

理解Go中的数据类型

引言 数据类型指定了编写程序时特定变量存储的值的类型。数据类型还决定了可以对数据执行哪些操作。 在本文中&#xff0c;我们将介绍Go的重要数据类型。这不是对数据类型的详尽研究&#xff0c;但将帮助您熟悉Go中可用的选项。理解一些基本的数据类型能让你写出更清晰、性能…

深度学习笔记_1、定义神经网络

1、使用了PyTorch的nn.Module类来定义神经网络模型;使用nn.Linear来创建全连接层。(CPU) import torch.nn as nn import torch.nn.functional as F from torchsummary import summary# 定义神经网络模型 class Net(nn.Module):def __init__(self):super(Net, self).__init__()…

小程序编译器性能优化之路

作者 | 马可 导读 小程序编译器是百度开发者工具中的编译构建模块&#xff0c;用来将小程序代码转换成运行时代码。旧版编译器由于业务发展&#xff0c;存在编译慢、内存占用高的问题&#xff0c;我们对编译器做了一次大规模的重构&#xff0c;采用自研架构&#xff0c;做了多线…

excel将文件夹下面的表格文件指定名称的sheet批量导出到指定文件中,并按照文件名保存在新文件的不同sheet中

excel将文件夹下面的表格文件指定名称的sheet批量导出到指定文件中&#xff0c;并按照文件名保存在新文件的不同sheet中 import pandas as pd import ositems os.listdir("./") sheetname"" for item in items:if item.__contains__(xls):dfpd.read_exc…

px4的gazebo仿真相机模型报错解决办法,返回值256

&#x1f449;事情起因&#xff1a;我想做关于PX4无人机的摄像头仿真&#xff0c;根据PX4的官网文件 Tools/sitl_gazebo文件夹里面有对应的模型可以使用&#xff0c;我就想在mavros_posix_sitl文件里面修改vehicle参数&#xff0c;比如直接将vehicle“iris_stereo_camera”。然…

【前段基础入门之】=>CSS 中对颜色数值的四种表达方式!

导语&#xff1a; 在通过 CSS 设置元素样式的时候&#xff0c;对于颜色的定义&#xff0c;有以下四种表达方式。 文章目录 方式一&#xff1a;【颜色名】方式二&#xff1a;rgb 或 rgba方式三&#xff1a;&#xff1a;HEX 或 HEXA方式四&#xff1a;HSL 或 HSLA 方式一&#xf…

系统集成项目管理总结(笔记)

系统集成项目管理总结 基础知识 第一章 信息化知识 第二章 信息系统服务管理 第三章 系统集成专业技术 第四章 项目管理一般知识 第五章 立项管理 第六章 整体管理 第七章 范围管理 第八章 进度管理 第九章 成本管理 第十章 质量管理 第十一章 人力资源管理 第十二…

【Nuxt】04 Nuxt2-SEO: sitemap.xml、seo优化、robots.txt

1 SiteMap设置 环境准备 注意生成sitemap依赖于nuxtjs/sitemap&#xff0c;并且需要用axios进行请求&#xff0c;不要使用nuxtjs/axios&#xff0c;不然会报错 sitemap.xml配置 在nuxt.config.js中配置下面的内容 npm install nuxtjs/sitemap npm install axios在static/s…

用于YOLO格式分割的咖啡叶病害数据集。

下载链接&#xff1a;https://download.csdn.net/download/qq_40840797/88389334 数据集&#xff0c;一共1164张照片 随机选取几张照片及对应的目标标签 因为健康&#xff0c;所以标签为空

c++设计模式:单例模式

单例模式 单例模式属于创建类型的一种常用的软件设计模式,通过单例模式的方法创建的类在当前进程中只有一个实例。 应用场景 配置管理 日志记录 线程池 连接池 内存池 对象池 消息队列 实现步骤 1.将类的构造方法定义为私有方法&#xff08;为了只实例化一个单例&#xff…

github搜索技巧

指定语言 language:java 比如我要找用java写的含有blog的内容 搜索项目名称包含关键词的内容 vue in:name 其他如项目描述跟项目文档&#xff0c;如下 组合使用 vue in:name,description,readme 根据Star 或者fork的数量来查找 总结 springboot vue stars:>1000 p…

【网络安全】2023年堡垒机品牌大全

随着大家网络安全意识的增加&#xff0c;随着国家等保政策的严格执行&#xff0c;越来越多的企业开始采购堡垒机。这里就给大家总结了部分堡垒机品牌&#xff0c;让大家参考参考。 2023年堡垒机品牌大全 1、行云堡垒 2、JumpServer 3、安恒 4、骞云 5、齐治 6、阿里云 …

编码规范、git 规范

1、eslint配置&#xff0c;让代码变得更加规范&#xff0c;就是定义一些规则&#xff0c;开发人员要去遵守 该文件也是推荐在根目录下使用 2、prettier 就是格式化开发人员的代码 1、vscode 安装 prettier 插件 在项目根目录下创建一个 .prettierrc文件 然后去prettier 官网…

k8s部署单点的mysql实例

k8s部署单点的mysql实例 文章目录 前言一、基础环境准备二、准备yaml文件三、yaml文件中的特殊配置3.1 时区的配置3.2 管理员密码的配置3.3 lostfound配置3.4 探针配置 总结 前言 记录一下根据kubernetes.io的范本部署一个mysql实例的过程 一、基础环境准备 准备一个k8s集群…

前端开发与后端开发:探索编程世界的两个街区

一、引言 编程世界就像一座大城市&#xff0c;前端开发和后端开发就像城市的两个不同街区。在这个城市中&#xff0c;每个街区都有其独特的魅力和吸引力。作为初学者&#xff0c;我们站在这个城市的交叉口&#xff0c;不知道应该选择哪个街区。而作为过来者&#xff0c;你已经…

马斯洛需求层次模型之安全需求之云安全浅谈

在互联网云服务领域&#xff0c;安全需求是用户首要考虑的因素之一。用户希望在将数据和信息托付给云服务提供商时&#xff0c;这些数据和信息能够得到充分的保护&#xff0c;避免遭受未经授权的访问、泄露或破坏。这种安全需求的满足&#xff0c;对于用户来说是至关重要的&…

物理层下的传输媒体

物理层下的传输媒体 传输媒体就是数据传输系统中在发送器和接收器之间的物理通路。 一、导引型传输媒体 1、双绞线 ​ 把两根相互绝缘的铜导线并排放在&#xff0c;然后用规则的方法绞合起来就构成了双绞线。绞合可较少对相邻导线的电磁干扰。 ​ 电话系统使用的双绞线通信距…