python如何实现罗马数字转整数

今天说一下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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容