Python 中的罗马数字转整数


假设我们有一些罗马文字,我们需要将其转换为整数。众所周知,罗马数字用以下不同的符号表示:

数字
I1
V5
X10
L50
C100
D500
M1000

如果我们仔细观察罗马数字,例如数字 'II',它表示 2,有两个 'I' 相加。对于 XII,它是 12,实际上是 X + II = 10 + 2 = 12。罗马数字 4 不是 IIII,而是 IV。这有点棘手。

  • I 可以用在 V(5)和 X(10)之前,分别表示 4 和 9

  • X 可以用在 L(50)和 C(100)之前,分别表示 40 和 90

  • C 可以用在 D(500)和 M(1000)之前,分别表示 400 和 900。

在这种情况下,我们将创建一个罗马数字转整数的转换器,可以转换 1 到 3999 之间的数字。

为了解决这个问题,我们将创建一些可能的数字及其值,以及一些特殊值,如 4、9、40、90、400、900。现在扫描给定的字符串,如果表中存在某个子字符串,则将其值添加到结果中,然后检查下一个,对于下一个匹配项,它将值与结果相加,最终形成数字。

让我们看看实现来更好地理解

示例(Python)

 在线演示

class Solution(object):
   def romanToInt(self, s):
      """
      :type s: str
      :rtype: int
      """
      roman = {'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}
      i = 0
      num = 0
      while i < len(s):
         if i+1<len(s) and s[i:i+2] in roman:
            num+=roman[s[i:i+2]]
            i+=2
         else:
            #print(i)
            num+=roman[s[i]]
            i+=1
      return num
ob1 = Solution()
print(ob1.romanToInt("III"))
print(ob1.romanToInt("CDXLIII"))

输入

"III"
"CDXLIII"

输出

3
443

更新于: 2023年9月14日

33K+ 浏览量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告