1 地址:https://leetcode-cn.com/problems/roman-to-integer/ 2 ''' 3 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 4 5 字符 数值 6 I 1 7 V 5 8 X 10 9 L 50 10 C 100 11 D 500 12 M 1000 13 例如, 罗马数字 2 写做 II ,即为两个并列的 1 。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。 14 15 通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况: 16 17 I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。 18 X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。 19 C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。 20 给定一个罗马数字,将其转换成整数。 21 22 23 24 示例 1: 25 26 输入: s = "III" 27 输出: 3 28 示例 2: 29 30 输入: s = "IV" 31 输出: 4 32 示例 3: 33 34 输入: s = "IX" 35 输出: 9 36 示例 4: 37 38 输入: s = "LVIII" 39 输出: 58 40 解释: L = 50, V= 5, III = 3. 41 示例 5: 42 43 输入: s = "MCMXCIV" 44 输出: 1994 45 解释: M = 1000, CM = 900, XC = 90, IV = 4. 46 47 ''' 48 49 ''' 50 思路: 51 1.长度大于2时,取二个值,判断如果后面值大于前面的值,则用后面值减去前面的值;并把这二个值从s中去除 52 53 2.如果前面值大于后面值,则把第一个值去除,然后累加 54 55 3.最终得到结果 56 ''' 57 58 class Solution: 59 def romanToInt(self, s: str) -> int: 60 init = {'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000} 61 sum = 0 62 while len(s) >=1: 63 if len(s) == 1: 64 sum += init[s] 65 break 66 else: 67 sum1 = init[s[0]] 68 sum2 = init[s[1]] 69 if sum2>sum1: 70 sum = sum + sum2 - sum1 71 s = s[2:] 72 else: 73 sum = sum + sum1 74 s = s[1:] 75 return sum