罗马数字包含以下七种字符: 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 。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/roman-to-integer
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

分析:

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

罗马数字由 I,V,X,L,C,D,M 构成;
当小值在大值的左边,则减小值,如 IV=5-1=4;
当小值在大值的右边,则加小值,如 VI=5+1=6;
由上可知,右值永远为正,因此最后一位必然为正。
一言蔽之,把一个小值放在大值的左边,就是做减法,否则为加法

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

代码:

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;}public 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;}}
}

代码二:

class Solution {public int romanToInt(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");int result = 0;for (int i=0; i<s.length(); i++) {result += which(s.charAt(i));}return result;}public int which(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;case 'a': return 4;case 'b': return 9;case 'c': return 40;case 'd': return 90;case 'e': return 400;case 'f': return 900;}return 0;}
}

算法练习:罗马数字转整数相关推荐

  1. 【每日一算法】罗马数字转整数

    微信改版,加星标不迷路! 每日一算法-罗马数字转整数 作者:阿广 阅读目录 1 题目 2 解析 1 题目 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值I 1 V 5 ...

  2. Java学习——算法(罗马数字转整数)

    罗马数字转整数 1.题目 马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 ==> 数值 I ==> 1 V ==> 5 X ==> 10 L ==> ...

  3. 算法题---罗马数字转整数

    罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I : 1 V : 5 X : 10 L : 50 C : 100 D : 500 M : 1000 例如, 罗马数字 ...

  4. 【算法】罗马数字转整数

    题目知识(拼写规则) 罗马数字共有7个,即I(1).V(5).X(10).L(50).C(100).D(500)和M(1000). 按照下述的规则可以表示任意正整数. 需要注意的是罗马数字中没有&qu ...

  5. java 算法学习 罗马数字转整数

    1. switch -case  值匹配 2.sum+= a  等价于 sum= sum+a 3.字符串中前一个值与后一个值比较: 1. 取出第一个值  2. for循环依次取值 从第二个值开始 3. ...

  6. leetcode 罗马数字与整数的转换算法

    介绍: 该算法是将罗马数字转换为整数,思路如下:比如IXX,使用临时变量temp保存上一个已经遍历的罗马数字,比如:遍历时是从后往前遍历的:1> 刚开始时,temp = 0; 遍历当前遍历到第一 ...

  7. 【算法百题之四十二】罗马数字转整数

    [算法百题之四十二]罗马数字转整数    大家好,我是Lampard~~    很高兴又能和大家见面了,接下来准备系列更新的是算法题,一日一练,早日升仙!    今天的问题是:罗马数字转整数 作为[整 ...

  8. 【算法练习】罗马数字转整数与整数转罗马数字

    Leetcode 题目(难度:简单) 13. 罗马数字转整数 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 ...

  9. Java算法罗马数字转整数

    本文章只提供算法. 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符          数值 I             1 V             5 X         ...

  10. 算法 罗马数字转整数

    算法 罗马数字转整数 1.题目 2.方法 2.1枚举法(没得办法) 2.2map(大神级别) 1.题目 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 ...

最新文章

  1. Zora P1测评报告-Tsrjrc
  2. 中修改环境变量_嵌入式 Linux下永久生效环境变量bashrc
  3. 微信突然更新,新增了这些功能...
  4. 自然水体辐射特性与数值模拟 pdf_【技术·航天】定量评估贡献 精准决策未来 ——气象卫星数据在数值预报系统中贡献的定量评估...
  5. eclipse 将javaWeb项目转化成maven项目
  6. poi xwpf 转换成 html,Apache POI创建的docx文档无法转化成html
  7. 感谢Adobe,用上了Silverlight RC0版本
  8. 如何实现Punycode中文域名转码
  9. Cloudera Hadoop 4 实战课程(Hadoop 2.0、集群界面化管理、电商在线查询+日志离线分析)...
  10. Matlab-杆单元整体刚度矩阵组装(有限元基础-曾攀)
  11. XAMPP最详细的安装及使用教程
  12. 【数理统计】卡方检验
  13. 综述国内外三维视觉测量系统的发展现状
  14. 生日快乐程序_7天获客6万,小程序助力品牌对抗“行业寒冬”
  15. CRAFT:Character region awareness for text detection 论文阅读
  16. 副业怎么样通过手游达到月入过万
  17. 系统集成项目管理工程师主要公式
  18. 爱之树(二叉树建树+搜索)
  19. 最大子串和【浙江工商大学oj】【详细注释版】
  20. 【测验1 编程题】: Python基本语法元素 (第1周)

热门文章

  1. PHP 求职技能需求
  2. 推测30以内具体数字
  3. 微信小程序多行文本超出显示省略号
  4. Windows更改显示dir命令为ls命令
  5. 完美实现了单次坐标转换同时绘制轨迹
  6. ADIDAS鞋标之终极诠释--基本知识,真假辨别(超多图),鞋标发展史!
  7. 优质的草原cc0高清摄影图片素材推荐,不容错过
  8. 百度选择网页游戏,能否成功?
  9. Git本地仓库基本操作
  10. 13岁上大学,19岁南大读博!00后天才少女研究「中国芯」