Python 中的罗马数字转整数
假设我们有一些罗马文字,我们需要将其转换为整数。众所周知,罗马数字用以下不同的符号表示:
数字 | 值 |
---|---|
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
广告