罗马数字包含以下七种字符: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
解题思路:
1.首先创建一个字典,将罗马数字的字符与其对应的整数数值进行映射,这样方便后续根据字符获取其数值。
2.然后遍历给定的罗马数字字符串,对应每一个字符,获取其对应的数值。
3.当遍历到某个字符时,需要检查它是否可能与下一个子粗构成下一个字符构成特殊情况,(即小小数字在大数字左边的情况)。如果是特殊情况,就需要减去当前字符对应的数值(因为它是作为减数),否则就直接加上当前字符对应的数值。
4.继续遍历直到处理完整个罗马数字字符串,最后得到的总和就是转换后的整数。
代码:
代码解析:
1.首先定义了roman_dict字典,用于存储罗马数字字符和其对应整数的映射关系。
2.初始化result为0,用于累加转换后的整数值
3.通过循环遍历罗马数字字符串s,每次获取当前字符对应的数值value。
4.如果当前字符不是字符串的最后一个子粗,并且下一个字符对应的数值大于当前字符的数值,就说明遇到了特殊情况,此时将当前字符的数值从result中减去;否则就将当前字符的数值加到result中。最后返回result即为转化后的整数。