13-->>python3,,罗马数字包含以下七种


罗马数字包含以下七种字符:I,V,X,L,C,D和M。

字符          数值I             1V             5X             10L             50C             100D             500M             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解释: C = 100, L = 50, XXX = 30, III = 3.

示例5:

输入:"MCMXCIV"输出: 1994解释: M = 1000, CM = 900, XC = 90, IV = 4.

分析:要求将罗马数字转换为十进制数,首先我们需要知道转化的机制。  如果输入的是一个字母(罗马数),则直接返回该字母代表的十进制数  如果是两个及以上:从第一位(i)开始向后查找判断,如果 i 代表的十进制数大于 i+1 所代表的,  就相加,反之,就减去 i 代表的十进制数。  这道题很明显需要对罗马数字对应的十进制数进行标记,而在python中,字典操作可以很方便的解决该问题。  使用字典进行标记,再对给定罗马数进行分析转换。
 1 class Solution: 2     def romanToInt(self, s): 3         """ 4         :type s: str 5         :rtype: int 6         """ 7         tag={‘M‘:1000,‘D‘:500,‘C‘:100,‘L‘:50,‘X‘:10,‘V‘:5,‘I‘:1} 8         sum=0 9         if len(s)==1:10             return tag[s[-1]]11         for i in range (len(s)-1):12             if tag[s[i]]<tag[s[i+1]]:    #tag[s[i]]表示该字母的键值13                 sum-=tag[s[i]]14             else:15                 sum+=tag[s[i]]16             17         return  sum+tag[s[-1]]

13-->>python3

评论关闭