罗马数字:I=1, V=5, X=10, L=50, C=100, D=500, M=1000
其中:III=3, IV=4, IX=9, XL=40, XC=90, CD=400, CM=900
提示:999=CMXCIX, 49=XLIX
题目:定义一个类,实现输入s,数据保证 s 是一个有效的罗马数字,且表示整数在范围 [1, 3999] 内,能够返回对应的整数值。
思路:根据观察得知罗马数字是左结合,因此可以利用这个性质将输入的罗马字符切片成数个结合单元,然后将每个结合单元对应值累加即可。比如999:CM(=900) + XC(=90) + IX(=9)
代码:
class Solution(object):
def romanToInt(self, s):
"""由于组合罗马字符会切片时会被分开,再累加时会改变它的值,
比如IX=9,切开相加为I + X = 11, 因此将会造成误解的组合字符替换成
单非罗马个字符"""
s = s.replace('IV', 'B')
s = s.replace('IX', 'E')
s = s.replace('XL', 'F')
s = s.replace('XC', 'H')
s = s.replace('CD', 'J')
s = s.replace('CM', 'T')
values = {
'I': 1,
'B': 4,
'V': 5,
'E': 9,
'X': 10,
'F': 40,
'L': 50,
'H': 90,
'C': 100,
'J': 400,
'D': 500,
'T': 900,
'M': 1000
} # 赋值
result = 0
for i in s:
result += values[i] # 切片,根据键获取值,累加
return result
完成!
该博客介绍了如何通过Python实现将罗马数字转换为整数。代码中定义了一个Solution类,利用字符串替换将组合罗马数字转换为单个字符,然后通过字典映射值进行累加,确保正确计算出整数值。示例包括999(CMXCIX)和49(XLIX)的转换。
1379

被折叠的 条评论
为什么被折叠?



