【LeetCode】【Math】罗马数字转换为阿拉伯数字
Background
罗马数字由七个不同的符号表示:I,V,X,L,C,D和M。其与阿拉伯数字的对应关系如下:
阅读规则:
- 数值计算:简单加和。例如,罗马数字II代表 I(1)+I(1),即2。 12写为XII,由X + II得到。 27写为XXVII,即XX + V + II。
- 阅读顺序:罗马数字通常从左到右从大到小书写。
- 特殊规则:数字4写为IV而不是(IIII),I在V前,表示5-1。同理
IV:4,IX:9,XL:40,XC:90,CD:400,CM:900
Question:
给定罗马数字,将其转换为整数。 输入保证在1到3999的范围内。
Answer:
def romanToInt(self, s): total = 0 d = {"I":1, "V":5, "X":10, "L":50, "C":100, "D":500, "M":1000, "IV":4,"IX":9,"XL":40,"XC":90,"CD":400,"CM":900} for i in range(0,len(s)): total += d[s[i]] if "IV" in s: total -= 2 if "IX" in s: total -= 2 if "XL" in s: total -= 20 if "XC" in s: total -= 20 if "CD" in s: total -= 200 if "CM" in s: total -= 200 return total
本来想通过一个一个判断值,并且相加,但代码写不出来(以后可以再尝试一下),该思路类似于Hint2
*如果I在V或X之前,请减去1,例如:IV = 4和IX = 9
*如果X在L或C之前,则减去10,例如:XL = 40和XC = 90
*如果C在D或M之前,则减去100,例如:CD = 400和CM = 900
灵机一动,想到这个方法,当IV拆开读代表6,IV合起来代表4,错误答案和正确答案之间的差值是恒定的,只要补上这个差值就是正确答案了。