今天说一下python如何实现罗马数字转整数,写了三个方法
方法1:
#判断当前位置和下一个位置两个字母是否在mydict中
class Solution:
def romanToInt(self, s: str) -> int:
itemList = []
mydict = {'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
while i <len(s):
if s[i] in 'IXC' and i!=len(s)-1:
if s[i:i+2] in mydict:
itemList.append(mydict[s[i:i+2]])
i += 2
else:
itemList.append(mydict[s[i]])
i += 1
else:
itemList.append(mydict[s[i]])
i += 1
return(sum(itemList))
运行时间56ms,消耗内存14.9MB
方法2:
#把一个小值放在大值的左边,就是做减法,否则为加法
class Solution:
def romanToInt(self, s: str) -> int:
mydict = {'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}
return(sum([-mydict.get(item) if mydict.get(item)<mydict.get(s[i+1 if i+1 < len(s) else i]) else mydict.get(item) for i,item in enumerate(s)]))
运行时间76ms,消耗内存14.9MB
方法3:
#遍历整个 ss 的时候判断当前位置和前一个位置的两个字符组成的字符串是否在字典内
class Solution:
def romanToInt(self, s: str) -> int:
d = {'I':1, 'IV':3, 'V':5, 'IX':8, 'X':10, 'XL':30, 'L':50, 'XC':80, 'C':100, 'CD':300, 'D':500, 'CM':800, 'M':1000}
return sum(d.get(s[max(i-1, 0):i+1], d[n]) for i, n in enumerate(s))
运行时间60ms,消耗内存14.8MB
也欢迎大家一起学习python哦http://www.daimaketang.com/register?inviteCode=XPGQQ