基础算法(Leetcode)刻意练习训练营:第十三天打卡

今天的题目是13. 罗马数字转整数

简单的题还是搞的定的,就是效率貌似不高,正常遍历,顺便处理特诉情况

class Solution:
    def romanToInt(self, s: str) -> int:
        # 7种字母对应数字表
        dic = {'I':1, 'V':5, 'X':10, 'L':50, 'C':100, 'D':500, 'M':1000}
        # 6种特殊情况数组
        dic_sp = ('IV', 'IX', 'XL', 'XC', 'CD', 'CM')
        # 存放结果变量
        sum = 0
        # 存放上次字母
        pre = ''
        # 循环遍历罗马数字
        for char in s:
        	# 如果和前一个字母组成特殊组合
            if (pre + char) in dic_sp:
            	# 则前一次的结果应该2倍冲销(加1,变减2)
                sum -= dic[pre] * 2
			# 记录上个字母
            pre = char
            # 累加本次字母对应数字
            sum += dic[char]
        return sum

3999/3999 cases passed (56 ms)
Your runtime beats 58.49 % of python3 submissions
Your memory usage beats 5.09 % of python3 submissions (13.5 MB)

看了一下精选的题解,两行。。。

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))

3999/3999 cases passed (64 ms)
Your runtime beats 36.49 % of python3 submissions
Your memory usage beats 5.09 % of python3 submissions (13.5 MB)

简洁,不过执行效率貌似也不咋地。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值