【Leetcode】罗马数字转整数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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值