罗马数字: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
完成!