「力扣」13. 罗马数字转整数

Ubuntu22.04安装ros(一键搞定) 然后发现可以一键安装,话不多说,直接终端输入如下指令。回车之后系统会自动安装ros。 阅读详情

13. 罗马数字转整数

「力扣」13. 罗马数字转整数

题目描述

罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。

字符          数值
I             1
V             5
X             10
L             50
C             100
D             500
M             1000

例如, 罗马数字 2 写做 II ,即为两个并列的 1 。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

  • I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
  • X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。
  • C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。

给定一个罗马数字,将其转换成整数。

示例 1:

输入: s = "III"
输出: 3

示例 2:

输入: s = "IV"
输出: 4

示例 3:

输入: s = "IX"
输出: 9

示例 4:

输入: s = "LVIII"
输出: 58
解释: L = 50, V= 5, III = 3.

示例 5:

输入: s = "MCMXCIV"
输出: 1994
解释: M = 1000, CM = 900, XC = 90, IV = 4.

提示:

  • 1 <= s.length <= 15
  • s 仅含字符 ('I', 'V', 'X', 'L', 'C', 'D', 'M')
  • 题目数据保证 s 是一个有效的罗马数字,且表示整数在范围 [1, 3999] 内
  • 题目所给测试用例皆符合罗马数字书写规则,不会出现跨位等情况。
  • IL 和 IM 这样的例子并不符合题目要求,49 应该写作 XLIX,999 应该写作 CMXCIX 。
  • 关于罗马数字的详尽书写规则,可以参考 罗马数字 - Mathematics 。

题解

本文的大致解提思路是循环字符串,每个字符串拿到对应的数字,然后加起来就是结果,但是要注意文中提示了特殊情况,例如 4 不写做 IIII,而是 IV,其中i对应的数字是1, V对应的数字是5,结果是4,所以得出结论,如果当前字符比右侧临近字符对应的数值小则使用减法,否则使用加法。

class Solution {
    public int romanToInt(String s) {
        // HashMap存储罗马字符与数字的关系,用于需要的时候取值,其时间时间复杂度是O(1)
        Map<Character, Integer> map = new HashMap<>();
        map.put('I', 1);
        map.put('V', 5);
        map.put('X', 10);
        map.put('L', 50);
        map.put('C', 100);
        map.put('D', 500);
        map.put('M', 1000);
        // 字符串的长度
        int length = s.length();
        // 结果
        int sum = 0;
        // 当前罗马字符的右侧罗马字符对应的数值。
        int right = 0;
        for (int i = length - 1; i >= 0; i--) {
            char c = s.charAt(i);
            Integer cInt = map.get(c);
            if (cInt >= right) {
                sum += cInt;
            } else {
                sum -= cInt;
            }
            right = cInt;
        }
        return sum;
    }
}

提交结果如下:

提交结果

代码中我使用了right变量,用于存储当前罗马字符右侧罗马字符对应的数值,以此来判断使用加法还是减法,写完之后看了下是否有优化空间,发现其实可以不定义这个变量。

i可以从头开始遍历,最后一个字符肯定使用加法计算,所以修改为如下代码:

class Solution {
    public int romanToInt(String s) {
        // HashMap存储罗马字符与数字的关系,用于需要的时候取值,其时间时间复杂度是O(1)
        Map<Character, Integer> map = new HashMap<Character, Integer>() {{
            put('I', 1);
            put('V', 5);
            put('X', 10);
            put('L', 50);
            put('C', 100);
            put('D', 500);
            put('M', 1000);
        }};
        // 字符串的长度
        int length = s.length();
        // 结果
        int sum = 0;
        for (int i = 0; i < length; ++i) {
            // 当前值
            Integer cv = map.get(s.charAt(i));
            if (i == length - 1) {
                sum += cv;
            } else {
                // 下一值
                Integer nv = map.get(s.charAt(i + 1));
                if (cv >= nv) {
                    sum += cv;
                } else {
                    sum -= cv;
                }
            }
        }
        return sum;
    }
}

提交结果如下:

提交结果

基于电能质量治理的场景实例:统一电能质量调节器(UPQC)与并网逆变器集成 本文通过Simulink平台,详细演示了统一电能质量调节器(UPQC)与并网逆变器的集成系统建模与仿真过程。主要内容包括:1)系统架构设计,包含光伏并网系统、非线性负载和电压扰动源;2)UPQC主电路设计,包括串联/并联单元拓扑和控制策略实现;3)与并网逆变器的能量交互与协同控制逻辑;4)典型电能质量问题的仿真测试场景。结果表明,该集成系统能有效治理电压暂降(维持负载电压380V±2%)和电流谐波(电网THD<3%),直流母线电压稳定在800V±5V。该系统为应对复杂电能质量问题提供了"电压 阅读详情

相关推荐

手把手教你实现阿克曼ROS小车的运动控制

本文详细介绍了如何从零开始实现阿克曼ROS小车的运动控制。内容涵盖硬件搭建、STM32底层PID速度与舵机控制、ROS层阿克曼运动学模型解析,以及上下位机通信协议设计。通过手把手的代码示例和调试步骤,帮助机器人爱好者与开发者掌握将高级速度指令转化为小车具体动作的全流程,实现流畅的阿克曼转向控制。

weixin_29193259的博客 198

LeetCode13.罗马数字转整数(三种解法)

罗马数字转整数

人生处处是围城,一切都是最好的安排! 980

2024 年高教社杯全国大学生数学建模竞赛题目【A/B/C/D/E题】完整论文+代码+结果

2024国赛A题参考论文。2024国赛D题参考论文。2024国赛E题参考论文。2024国赛B题参考论文。2024国赛C题参考论文。

qq_52590045的博客 5355

力扣算法题:罗马数字转为整数

罗马数字包含以下七种字符:I,V,X,L,C,D和M。给定一个罗马数字,将其转换成整数。

weixin_50626279的博客 425

基于PLC的冲压件自动生产线电气系统设计【附数据】

考虑到生产线的高效运行和维护简便性,选择了三菱FX系列的可编程逻辑控制器(PLC)作为核心控制单元,该型号的PLC因其高可靠性和强大的功能集,在工业自动化领域有着广泛的应用。最后,在完成初步的软件开发后,进行了多轮次的模拟测试和现场调试,逐步修正了存在的问题,最终达到了预期的功能要求。例如,对于进料环节,选用了光电传感器以精确检测物料的位置;此外,为了适应不同尺寸的工件加工需求,还特别设计了一套可调节的夹具系统,不仅提高了生产线的灵活性,同时也降低了更换模具的成本。✅ 感恩科研路上每一位志同道合的伙伴!

lagougongzuoshi的博客 1291

ENSP实验一:防火墙基础配置

配置client(内网)、FTP Server(外网)的IP地址。进入防火墙,输入密码:默认为admin@123。

Carohuan的博客 1万+

力扣第13题罗马数字转整数

一、题目:13. 罗马数字转整数。

qq_39939541的博客 286

1104全部报表版本号-银监会报表

G4B_Ⅲ(a)X1《与非中央交易对手的衍生具交易对手信用风险违约风险计算表(现期风险暴露法)(第一档)》G4B_Ⅲ(b)X1《与非中央交易对手的证券融资交易对手信用风险违约风险计算表(权重法)(第一档)》G4B_Ⅲ(a1)X2《与非中央交易对手的衍生具交易对手信用风险违约风险计算表(标准法)(第二档)》Ⅲ(a)X2《与非中央交易对手的衍生具交易对手信用风险违约风险计算表(现期风险暴露法)(第二档)》Ⅲ(a1)X1《与非中央交易对手的衍生具交易对手信用风险违约风险计算表(标准法)(第一档)》

数字化老司机 6287

LeetCode13.罗马数字转整数

题目描述: 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并...

qq_36815750的博客 684

西电微原课设——矩阵式键盘数字密码锁设计

内容要求:根据设定好的密码,采用4x4矩阵键盘实现密码的输入功能。当密码输入正确之后,锁就打开(绿灯亮),10秒之后,锁自动关闭(红灯亮);如果连续输入三次密码不正确,就锁定按键5秒钟,同时发出报警(黄灯闪),5秒后,解除按键锁定,恢复密码输入。...

Polaris的博客 1万+

NVIDIA Isaac Sim 入门教程(二)

Omniverse Isaac Sim 的工作空间非常容易自定义。调整用户界面的大小、停靠、取消停靠、添加和移除面板都非常容易。进入顶部菜单栏,单击下拉菜单最下方的窗口 > 视口 > 视口 2(现在工作区中应该会出现一个名为 "视口 2 "的新视口。如果您想创建更多的视口,请按照相机检查器扩展进行操作。单击并拖动视口 2 的顶部标题以激活停靠部件。拖放到原始视口的右侧,将两个视口并排放置。单击并向左拖动视口 2 的左侧,使视口大小相等。

机器人控制与仿真应用 6544

力扣简单题目之罗马数字转整数

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

s1403866632的博客 635

OpenClaw人人养虾:接入Synology Chat

Synology Chat 是群晖 NAS(Network Attached Storage,网络附属存储)内置的即时通讯应用。

王国平的博客 780

2024.6.1 力扣第13题“罗马数字转整数”

leetcode算法第13题,罗马数字转整数

m0_53543026的博客 209

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

力扣第13题“罗马数字转整数”(python解决)

(ps这里莫名就想到了双指针,可能和之前”盛水最多容器“那题有关)然后我就利用双指针从右往左遍历,遇到字母就把对应的值放进temp_list,再用左右指针判断相邻两字母是不是4,9,40,90这种特殊情况,是的话先提前减去,例如是"IV"这种情况,left指向"I",right指向"V",那我就提前减去两个”I“对应的值,让后right =left,然后left -1,再加上一次”I“,相当于5-2+1=4,其余类似。(其实我感觉这几行代码可以重复写出来,但是我水平还不够,没有更好的书写方式)

m0_60689417的博客 388

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【leetcode】13. 罗马数字转整数。「哈希表」

罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。 通常情况

Khalil三省的博客妙妙屋 165

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

力扣 13.罗马数字转整数

特殊组合判断及处理:在每次循环中,判断当前字符与下一个字符所对应的数值大小关系。如果当前字符对应的数值小于下一个字符对应的数值,说明遇到了罗马数字表示中的特殊情况(当前字符不是最后一个字且当前字符代表的值小于下一个字符),此时就将当前字符对应的数值从结果变量。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4。否则,就是正常的罗马数字组合情况,将当前字符对应的数值累加到。,利用字符的 ASCII 码差值作为数组索引,将罗马数字中用到的字符(循环遍历字符串中的每个字符。

2401_89122881的博客 1671

LeetCode 13. Roman to Integer, 罗马数字转整数 ,C#

前言 本文介绍了 LeetCode 第 13 题 , “Roman to Integer”, 也就是 “罗马数字转整数” 的问题. 本文使用 C# 语言完成题目。 题目 English LeetCode 13. Roman to Integer Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M. Symbol Value I 1 V 5

wf824284257的博客 624

leetcode—13题—罗马数字转整数—Java版—个人解法

罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II。27 写做 XXVII, 即为 XX + V + II。通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4。同样地,数字 9 表示为 IX。

PYmili的博客 860

LeetCode——13罗马数字转整数

LeetCode——13罗马数字转整数题目解题思路AC思路 题目 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 10...

wangshuoq的博客 207

【LeetCode】13. 罗马数字转整数

本文介绍了将罗马数字转换为整数的算法,重点处理特殊减法规则(如IV=4、IX=9等)。通过从右向左遍历字符串,比较相邻字符值,当较小值位于较大值左侧时执行减法操作。算法采用O(n)时间复杂度和O(1)空间复杂度,提供多种解法对比,并包含流程图展示转换过程(如"MCMXCIV"转为1994)。关键优化包括遍历方向选择、数组映射替代哈希表,适用于时钟、章节编号等实际场景。

qq_32019341的博客 1040

leetcode-13罗马字符转整数

leetcode-13罗马字符转整数   算法:转换的规律是先逐字符按照对应的阿拉伯数字累加,然后对于特殊的(I、X、C出现在左侧)要处理。处理方法:出现特殊字符组合减去双倍的左侧字符(在开始的处理中已经加过一次,而实际的结果中却是要减去,那么就需要在加的基础上减去两倍)。 Code: vertion : Java 1 class Solution { 2 ...

117

力扣第13题:13.罗马数字转整数学习记录和思路

复盘力扣第13题的思路并进行总结

AssassinTheD的博客 612

LeetCode第13题_罗马数字转整数

这道题的关键点:理解罗马数字的表示规则识别特殊情况的处理方法选择合适的实现策略两种解法比较:从左到右扫描:代码简洁,思路清晰预处理特殊情况:更直观,但代码较复杂优化思路:使用数组替代Dictionary可能更快特殊情况的处理可以优化考虑输入验证。

qq_40263592的博客 695

LeetCode刷题记录——13罗马数字转整数

LeetCode刷题记录——13罗马数字转整数 一 题目描述: 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 100...

qq_42611498的博客 277

leetcode-13-罗马数字转整数 Python 编程实现

1.题目介绍 13. 罗马数字转整数 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII,

lbj1260200629的博客 573
上一篇: 「力扣」9. 回文数
下一篇: 「力扣」14. 最长公共前缀
「已注销」
博客等级 码龄3年 128粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值