Python 中的罗马数字转整数
pythonserver side programmingprogramming
假设我们有罗马数字;我们必须将它们转换为整数。我们知道罗马数字代表一些不同的符号,如下所示 -
数字 | 值 |
---|---|
I | 1 |
V | 5 |
X | 10 |
L | 50 |
C | 100 |
D | 500 |
M | 1000 |
如果我们仔细看罗马数字,就好像假设数字是"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