leetcode刷题python之罗马数字转整数

唉。。。先贴上自己菜菜的超过时间限制的辣鸡代码
过久的判断确实不好
应该减少判断

class Solution:
    def romanToInt(self, s: str) -> int:
        num_list={
            'I':1,
            'IV':4,
            'V':5,
            'IX':9,
            'X':10,
            'XL':40,
            'L':50,
            'XC':90,
            'C':100,
            'CD':400,
            'D':500,
            'CM':900,
            'M':1000
        }
        result=0
        for i in range(len(s)):
            result+=num_list[s[i]]
            while (i+1)<len(s):
                if (s[i]=='I' and (s[i+1]=='V' or s[i+1]=='X')) or (s[i]=='X' and (s[i+1]=='L' or s[i+1]=='C')) or (s[i]=='C' and (s[i+1]=='D' or s[i+1]=='M')) :
                    result-=2*num_list[s[i]]
        return result

enumerate返回字符串的字符对应的 位置以及内容
get()里面有两个变量,一个检测双字符(如果双字符代表数字,那么会返回要一个数,如果不代表数字,则不会返回数),一个检测单字符(必然返回数),
使用字典的时候,不能用()或者{}来取出数据,应该使用[ ]…这个小地方真是卡了半天。。。。
再附上题解上看到的精妙的。。。算法
这个sum也太方便了把,里面如果有两个数字的话可以出来,还可以同时处理系统里面的循环出来的数据,amazing

class Solution:
    def romanToInt(self, s: str) -> int:
        num_list={
            '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(num_list.get(s[max(i-1,0):i+1], num_list[n])  for i ,n in enumerate(s)) 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值