题目描述:
罗马数字包含以下七种字符: 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。
给定一个罗马数字,将其转换成整数。
输入输出实例:
思路:这个题目一开始可能想的有点复杂了会想到比如中间有‘IM’这种顺序,但是这种是不规范的写法,也就是说如果前面一个字符比后面一个字符小,那情况只有六种:IV,IX,XL,XC,CD,CM。我们可以使用贪心算法,total当作我们的总值,从第一个字符开始往后找,如果一个字符比后一个字符小,我们就用total减去这一个字符对应的数,如果比后面的字符大或者相等我们就加上这个字符对应的数。根据上述思路和算法有以下代码:
class Solution:
def romanToInt(self, s: str) -> int:
#定义一个字典
Roma = {'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}
total = 0
n = len(s)
for i in range(n):
if i<n-1 and Roma[s[i]] < Roma[s[i+1]]:
total = total - Roma[s[i]]
else:
total = total + Roma[s[i]]
return total
最后也是成功通过了