力扣--哈希表13.罗马数字转整数

首先我们可以知道,一个整数,最多由2个罗马数字组成。

思路分析

这个方法能够正确将罗马数字转换为阿拉伯数字的原因在于它遵循了罗马数字的规则,并且对这些规则进行了正确的编码和处理。

罗马数字规则
  1. 罗马数字由以下字符组成:I, V, X, L, C, D, M,分别对应的阿拉伯数字为:1, 5, 10, 50, 100, 500, 1000。
  2. 一般情况下,罗马数字表示法从左到右是从大到小累加。例如:VI = 5 + 1 = 6。
  3. 但是,有些情况下需要用减法来表示,例如:IV = 5 - 1 = 4。这种情况出现在一个较小的数字出现在较大的数字之前。
算法步骤
  1. 初始化哈希表

    • 使用一个哈希表(map)将罗马数字字符映射到对应的阿拉伯数字值。这样我们可以在O(1)时间复杂度内查找每个字符对应的值。
  2. 遍历字符串

    • 从左到右遍历罗马数字字符串。
  3. 处理特殊规则

    • 如果当前字符的值小于下一个字符的值,那么根据罗马数字的规则,当前字符应被减去。例如,IV中的I(1)小于V(5),因此应计算5 - 1。
    • 如果当前字符的值大于或等于下一个字符的值,那么直接将其值累加。例如,VI中的V(5)大于I(1),因此应计算5 + 1。
为什么可以得出正确结果
  1. 哈希表的使用

    • 哈希表允许我们快速找到每个罗马字符对应的阿拉伯数字值,确保了查找操作的高效性和准确性。
  2. 遍历与比较

    • 通过遍历字符串,并比较当前字符与下一个字符的值,我们可以准确地识别应该进行加法还是减法。这种方法符合罗马数字的规则,从而确保了正确的转换。
  3. 累加与减法处理

    • 如果遇到需要进行减法的情况(即当前字符值小于下一个字符值),我们在累加当前字符值时进行了正确的调整,即减去当前字符值两次(先加再减),从而正确处理了减法情况。
class Solution {// 哈希表,用于存储罗马数字字符到阿拉伯数字的映射map<char, int> hash;// 函数:初始化哈希表,将罗马数字映射为阿拉伯数字void getHash() {hash['I'] = 1;hash['V'] = 5;hash['X'] = 10;hash['L'] = 50;hash['C'] = 100;hash['D'] = 500;hash['M'] = 1000;}public:int romanToInt(string s) {getHash();  // 初始化哈希表int num = 0;  // 最终结果int after;    // 下一个字符对应的值// 遍历字符串的每个字符for (int i = 0; i < s.size(); i++) {if (i == s.size() - 1) {// 如果是最后一个字符,直接加上对应的值num += hash[s[i]];} else {// 获取下一个字符的值after = hash[s[i + 1]];// 如果当前字符的值小于下一个字符的值if (hash[s[i]] < after) {// 根据罗马数字的规则,组合成减法表达式num += after - hash[s[i]];// 跳过下一个字符i++;} else {// 当前字符的值大于或等于下一个字符的值,直接加上num += hash[s[i]];}}}return num; // 返回结果}
};

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

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

相关文章

运维笔记.MySQL.基于mysqldump数据备份与恢复

运维专题 MySQL.基于mysqldump数据备份与恢复 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: [email protected]. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_2855…

多微信如何高效管理?一台电脑就能搞定!

对于有多个微信号的人来说&#xff0c;管理这些微信无疑是一道难题。 今天&#xff0c;就给大家分享一个能够让你高效管理多个微信号的神器——个微管理系统&#xff0c;下面&#xff0c;就一起来看看它都有哪些功能吧&#xff01; 1、多号同时登录在线 系统支持多个微信号同…

【记录一个问题】username@hostname:~$ 变为 -bash-4.2$

当命令行提示符从常规的 $ 或 usernamehostname:~$ 变为 -bash-4.2$&#xff0c;这通常表明你的shell会话丢失了对当前用户环境的一些关键信息&#xff0c;特别是关于用户主目录&#xff08;通常是 /home/username&#xff09;的信息。 原因 用户主目录丢失&#xff1a; 最可…

【综合类型第 39 篇】《我的创作纪念日》成为创作者的第2048天

这是【综合类型第 39 篇】&#xff0c;如果觉得有用的话&#xff0c;欢迎关注专栏。 前言 无意间看了一眼CSDN的私信&#xff0c;提示我 Allen Su &#xff0c;不知不觉今天已经是你成为创作者的 第2048天 啦&#xff0c;为了纪念这一天&#xff0c;我们为您准备了一份专属小…

2. PCI总线基本概念

PCI即Peripheral Componet Interconnect&#xff0c;中文意思是“外围器件互联”&#xff0c;是由PCISIG推出的一种局部并行总线标准。PCI总线是由ISA总线发展而来&#xff0c;是一种同步的独立于处理器的32位或64位局部总线。目前&#xff0c;PCI总线广泛应用于连接显卡&#…

JacksonConfig 配置 Long 序列化规则

JacksonConfig 配置 Long 序列化规则 将超长 long 值转换为 string&#xff0c;解决前端 JavaScript 最大安全整数是 2^53-1 的问题&#xff1b; 自定义Long序列化规则 import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.SerializerP…

操作抖音小店一直不出单怎么办?只需要做好这两点就可以了!

大家好&#xff0c;我是电商小V 最近很多新手小伙伴来咨询我说自己操作抖音小店&#xff0c;自己的店铺长时间不出单应该怎么办&#xff1f;今天咱们就来详细的说一下&#xff0c; 咱们要清楚的就是自己的店铺不出&#xff0c;只需要咱们做好这两点就可以了&#xff0c; 第一点…

mysql-差异备份详细流程

4.差异备份流程 差异备份流程&#xff08;重要) 第一次完整备份 innobackupex /xtrabackup innobackupex --userroot --password123456 /xtrabackup2024-05-23_20-25-05 第一次完整备份 2024-05-23_20-40-55 第二次差异备份 2024-05-23_20-47-37 第三次差异备份再往数据库里面…

特殊变量笔记2

案例需求 在demo4.sh中循环打印输出所有输入参数, 体验$*与$的区别 实现步骤 编辑demo4.sh脚本文件 # 增加命令: 实现直接输出所有输入后参数 # 增加命令: 使用循环打印输出所有输入参数演示 编辑demo4.sh文件 直接输出所有输入参数, 与循环方式输出所有输入参数(使用双引…

软件工程基础知识

一、软件工程概述 二、软件开发模型 三、软件开发方法 四、需求分析 五、系统设计 六、系统测试 七、软件开发项目管理 八、软件质量 九、软件度量

使用 sync_sso 同步 DiscourseConnect 用户数据 [Java]

最近有一个使用 SSO 把已有的用户同步到 Discourse 的需求。 所以&#xff0c;我就根据官方针对 PHP 实现&#xff08;Sync DiscourseConnect user data with the sync_sso route - developers - Discourse Meta &#xff09;写了一个有关 Java 的实现。 实现的方法很简单&am…

07网络编程及网络基础知识

【一】C/S模型和B/S模型 1.C/S模型----》c是指客户端&#xff0c;请求服务的&#xff0c;s是服务端&#xff0c;提供服务的 2.B/S模型----》B/S架构本质也是C/S架构让浏览器充当各个厂家的客户端 用户无需对应下载相应客户端 两种架构的优缺点C/S架构:王者荣耀优势:针对客户端…

using 用于枚举值

1. 用using声明枚举值 假设有一个限定范围的枚举类型(用枚举类声明): enum class Status{open, progress, done 9}; 与未限定作用域的枚举类型(不带类的枚举) 不同&#xff0c;此类型的值需要带有类型名的限定符: auto x Status::open; // OK auto x open; // ERROR…

腾讯云COS上传文件出现的问题

1、没有配置 ObjectMetadata 的文件长度 腾讯云COS上传文件出现数据损坏问题_no content length specified for stream data. strea-CSDN博客 2、 使用 FileInputStream使用完没有及时关闭导致报错 ClientAbortException: java.nio.channels.ClosedChannelException 添加…

滑动谜题 leetcode的BFS题目 启发如何写一个拼图编程呢

题目链接 题目要求&#xff0c;要将上面的拼板拼成123450 首先&#xff0c;转换为字符串&#xff0c;为什么要转换为字符串呢&#xff0c;因为处理会变得很简单比如示例一&#xff0c;转化为字符串是12345&#xff0c;目标字符串为123450&#xff0c;只需要证明通过某种交换&a…

AI爆文写作:或许开放性的标题,才会更让人想点开了解答案

这是新华社公众号的一条推文 从信息传递上来说&#xff0c;新闻标题应该直接&#xff0c;包含关键信息。 但这个标题&#xff0c;却没有直接点名哪个国家&#xff0c;要点进去才能看到。 这就是要让人点开的标题特征&#xff0c;标题没有提供完整信息&#xff0c;是开放性的…

Apache Hive 安装与配置的详细教程

1. Hive简介 Hive是基于Hadoop的一个数据仓库工具&#xff0c;用来进行数据提取、转化、加载&#xff0c;这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能将结构化的数据文件映射为一张数据库表&#xff0c;并提供SQL查询功能&#xff0c;能…

infoq读书笔记-Davide Taibi博士-花8年转型微服务却得不到回报,问题出在哪 儿?

InfoQ&#xff1a;您的论文“On the Definition of Microservice Bad Smells”涉及非常多的微服务不良做法&#xff0c;但如果要用几个大类别来列举危害性比较大的微服务反模式&#xff0c;您认为会是哪几类&#xff1f;另外&#xff0c;您能再大概分析说明下造成这个几个反模式…

linux新机快速配置ssh

配置SSH以实现证书登录 要配置新的Linux机器以实现证书登录&#xff0c;您需要执行以下步骤&#xff1a; 安装SSH服务器&#xff1a; sudo apt-get install openssh-server修改SSH端口&#xff08;可选&#xff09;&#xff1a; SSH配置文件&#xff08;通常位于/etc/ssh/sshd…

产品经理-产品设计规范(六)

1. 设计规范 2. 七大定律 2.1 菲茨定律 2.1.1 概念 2.1.2 理解 2.1.3 启示 按钮等可点击对象需要合理的大小尺寸根据用户使用习惯合理设计按钮的相对和绝对位置屏幕的边和角很适合放置像菜单栏和按钮这样的元素 2.1.4 参考使用手机习惯 2.1.5 案例 2.2 席克定律 2.2.1 概念 …