Leetcode刷题记录 罗马数字转整数

Leetcode13. 罗马数字转整数

问题描述
罗马数字转整数
自己的解题方法:

  1. 将罗马字母‘I’,‘V’,‘X’,‘L’,‘C’,‘D’,‘M’及其所代表的数字,分别放入两个List中,记作A,B,sum=0
  2. 如果S[i]在A中的索引小于S[i+1]在A中索引,sum加两者之差;
  3. 如果S[i]==S[i+1]==S[i+2] 或 S[i]==S[i+1],sum加上这些项的和;
  4. 否则 sum+S[i]

代码如下:

class Solution(object):
    def romanToInt(self, s):
        """
        :type s: str
        :rtype: int
        """
        sum=0
        A=['I','V','X','L','C','D','M']
        B=[1,5,10,50,100,500,1000]

        i=0
        while(i<len(s)):

            if i+1>=len(s):
                sum = sum + B[A.index(s[i])]
                i += 1

            elif A.index(s[i])<A.index(s[i+1]) :
                sum=sum+(B[A.index(s[i+1])]-B[A.index(s[i])])
                i+=2

            elif s[i]==s[i+1]:
                sum=sum+(B[A.index(s[i+1])]+B[A.index(s[i])])
                i+=2

            elif s[i]==s[i+1]==s[i+2]:
                sum=sum+(B[A.index(s[i+2])]+B[A.index(s[i+1])]+B[A.index(s[i])])
                i+=3

            else:
                sum = sum + B[A.index(s[i])]
                i += 1


        return sum

提交结果如下:
提交结果
参考其他方法,使用python的dict,记作M,检索速度会提升。

  1. 如果只有一个罗马字母就直接返回该罗马字母value
  2. 遍历罗马字符串S,如果M[S[i+1]]>M[S[i]],取二者之差,否则取二者之和
    代码如下:
    def romanToInt(self, s):
        M={'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}
        rus=0
        if s in M:
            return M[s]
        else:
            for item in range(0,len(s)-1):
                if M[s[item]]<M[s[item+1]]:
                    rus-=M[s[item]]
                else:
                    rus+=M[s[item]]
            rus+=M[s[-1]]
            return rus

结果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值