python实现leetcode-第13题-罗马数字转整数

class Solution:
    def romanToInt(self, s):
        """
        :type s: str
        :rtype: int
        """
        num1=num4=num5=num9=num10=num40=num50=num90=num100=num400=num500=num900=num1000=0
        
        
        for i in range(2):
            tmp = 0
            Length=len(s)
            for tmp in range(Length):
                if s[tmp:tmp+2]=='IV':
                    num4=num4+1
                    s = s[:tmp]+s[tmp+2:]
               
                elif s[tmp:tmp+2]=='IX':
                    num9=num9+1
                    s = s[:tmp]+s[tmp+2:]
                
                elif s[tmp:tmp+2]=='XL':
                    num40=num40+1
                    s = s[:tmp]+s[tmp+2:]
                
                elif s[tmp:tmp+2]=='XC':
                    num90=num90+1
                    s = s[:tmp]+s[tmp+2:]
                
                elif s[tmp:tmp+2]=='CD':
                    num400=num400+1
                    s = s[:tmp]+s[tmp+2:]
               
                elif s[tmp:tmp+2]=='CM':
                    num900=num900+1
                    s = s[:tmp]+s[tmp+2:]
                
                else:
                    s = s
    
                
        print(s)
        for i,num in enumerate(s):
            #print (i,num)
            if num == 'I':
                num1 = num1+1
            if num == 'V':
                num5 = num5+1
            if num == 'X':
                num10 = num10+1
            if num == 'L':
                num50 = num50+1
            if num == 'C':
                num100 = num100+1
            if num == 'D':
                num500 = num500+1
            if num == 'M':
                num1000 = num1000+1
        #print(num4,num9,num40,num90,num400,num900)       
        num = 1*num1+5*num5+10*num10+50*num50+100*num100+500*num500+1000*num1000+4*num4+9*num9+40*num40+90*num90+400*num400+900*num900
        return num

注意:

1 采用先判断特殊条件,之后再常规条件相加

2 enumerate函数用法

3 字符串切割与拼接

4 循环两次是因为两次才能覆盖所有情况,避免遗漏(通过测试了,具体原理需要研究)

附大佬代码:

class Solution:
    def romanToInt(self, s):
        """
        :type s: str
        :rtype: int
        """
        a = {'I':1, 'V':5, 'X':10, 'L':50, 'C':100, 'D':500, 'M':1000}        
        ans=0        
        for i in range(len(s)):            
            if i<len(s)-1 and a[s[i]]<a[s[i+1]]:                
                ans-=a[s[i]]
            else:
                ans+=a[s[i]]
        return ans

 

全部评论

相关推荐

不愿透露姓名的神秘牛友
09-29 11:20
点赞 评论 收藏
分享
搜索部&nbsp;首先说下timeline8.18,投递8.19,约一面8.21,晚上一面call约二面8.22,上午二面下午oc周末等待(8.23,8.24)8.25,offer一年前,我还是懵懵懂懂,高考完的暑假,只会提前学学高数,未来的画像是什么?我或许无法预测。开学后,自学Python,接单,无数个客户的ddl,偷偷摸摸一个人找自习的地方,这一步步竟然为后来的我,搭建工程能力的基础。大一上,我也要感谢我的第一位老板,让我接触到了实习,师兄带着我一步步入门,看他们写的飞书文档。大一下,导师带我参与企业项目,这让我渐渐发现,应该去实践,增长见识,而非局限当下,盯着自己的小新pro。不久后,第一波投递开始,结果当然是约面极少。盯着简历上的文字和ssob,我开始思考,确实很多可以去提升。带着些许不甘心,继续沉淀,慢慢的约面也越来越多,有的时候两天7场,准备完就接着下一个日程。这一次,也许是刚好到位吧,比较match,面试答的流利,关关难关关过,成为度孝子展望未来,依然是重重挑战,果然只有收到offer的那一刻是开心的。愿在百度星海拆解的每一段代码,都能成为丈量宇宙的诗行;此志终赴星河,而今迈步重铸天阶。屏幕前的你们,在无数个向星海奔赴的日夜,一定一定,会在未来化作群星回响的征程——请永远相信此刻埋首耕耘的自己!!!
一天三顿半:???百度提前批发 offer了?不是统一和正式批排序完再发吗我靠
百度求职进展汇总
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务