Python 中的罗马数字转整数

pythonserver side programmingprogramming

假设我们有罗马数字;我们必须将它们转换为整数。我们知道罗马数字代表一些不同的符号,如下所示 -

数字
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


相关文章