13.罗马数字转整数

博客记录了LeetCode第13题罗马数字转整数的解题过程。作者先用Python建立字典映射罗马符号,按两位判断解题,效率不高,平均100ms。后根据评论改进算法,即左符号值大于右则加当前值,反之减当前值,优化后用时64ms。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

每日leetcode(6)

13.罗马数字转整数,如下图
在这里插入图片描述
我用的python
这道题,一开始的想法是建立一个字典,映射1个符号的罗马符号和特殊符号的罗马符号,然后按两位进行判断,如下

class Solution():
    def romanToInt(self,s):
        sum=0
        i=0
        d={}
        d=dict(zip(['I','V','X','L','C','D','M','IV','IX','XL','XC','CD','CM'],[1,5,10,50,100,500,1000,4,9,40,90,400,900]))
        while i<len(s):
            if i==len(s)-1:
                sum+=d[s[i]]
                break
            elif s[i]+s[i+1] in d.keys():
                sum+=d[s[i]+s[i+1]]
                i+=2
            else:
                sum+=d[s[i]]
                i+=1
        if sum in range(1,4000):
            return sum
        else:
            return False

这个方法通过了,但是效率不太高,平均100ms,看评论的大神说
这道题是只要左边的符号值大于右边的,就加上当前值,不然就减去当前值,于是我改了一下
在这里插入图片描述
64ms,比较快

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值