【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,错误答案和正确答案之间的差值是恒定的,只要补上这个差值就是正确答案了。

 

posted @ 2020-04-21 10:40  桃花换小鱼干好不好  阅读(620)  评论(0)    收藏  举报