
13. 罗马数字转整数
发布日期:2021-05-07 10:47:09
浏览次数:37
分类:精选文章
本文共 1826 字,大约阅读时间需要 6 分钟。
罗马数字包含以下七种字符: 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 到 3999 的范围内。示例 1:
输入: “III”
输出: 3 示例 2:输入: “IV”
输出: 4 示例 3:输入: “IX”
输出: 9 示例 4:输入: “LVIII”
输出: 58 解释: L = 50, V= 5, III = 3. 示例 5:输入: “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 。
思路:
prenum
存储前一个字符对应的数字 num
存储当前字符对应的数字 prenum<num
,当前字符代表数字>前一个字符代表数字(特例:4和9、40和90、400和900); prenum=num
,当前字符代表数字等于前一个字符代表数字(表示连在一起的罗马字符代表数字); prenum>num
,当前字符代表数字<前一个字符代表数字(一般情况,左边的罗马字符代表数字大于右边罗马字符代表数字)。 代码:
class Solution { public int romanToInt(String s) { int sum = 0; int preNum = getValue(s.charAt(0)); for(int i = 1;i < s.length(); i ++) { int num = getValue(s.charAt(i)); if(preNum < num) { sum -= preNum; } else { sum += preNum; } preNum = num; } sum += preNum; return sum; } private int getValue(char ch) { switch(ch) { 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; } }}
发表评论
最新留言
不错!
[***.144.177.141]2025年03月26日 06时57分35秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
shell编程(六)语言编码规范之(变量)
2021-05-08
linux杂谈之特殊字符的打印和在各种软件如何打出
2021-05-08
vim杂谈(三)之配色方案
2021-05-08
vim杂谈(五)之vim不加载~/.vimrc
2021-05-08
Linux杂谈之终端快捷键
2021-05-08
vimscript学习笔记(二)预备知识
2021-05-08
vimscript学习笔记(三)信息打印
2021-05-08
awk杂谈之数组习题
2021-05-08
Linux网络属性配置详解
2021-05-08
Python(三十)类的理解
2021-05-08
Extjs布局详解
2021-05-08
Android数据库
2021-05-08
C语言之指针再涉(二)
2021-05-08
application类
2021-05-08
Linux基础命令(十四)软件安装的后续
2021-05-08
Perl(二)Perl简介
2021-05-08
HTML基础,块级元素/行内元素/行内块元素辨析【2分钟掌握】
2021-05-08
keil左侧文件调整方法
2021-05-08
本地分支关联远程分支
2021-05-08