Problem: 13. 罗马数字转整数

罗马数字转整数的超简单思路

1.思路

好久没有做过题,记得之前有接触到这一题,也是罗马数字转阿拉伯数字,不过要比这题简单。看了官方给的提示后逐渐有了思路,应该先用字典建立一个罗马数字与阿拉伯数字的映射,再从后往前处理这个罗马数字字符串。

2.解题方法

从后往前用while循环处理罗马数字字符串,当遇到成对的特殊罗马数字时,便进行相应的特殊处理,并让index-=2。对于每一个ifelse里面的处理都把结果添加到final_num中,最后返回final_num。

3.Code

class Solution:
    def romanToInt(self, s: str) -> int:
        roman_num={'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}
        final_num=0
        index=len(s)-1
        while index>=0:
            if s[index]=='V' or s[index]=='X':
                if index==0:
                    final_num+=roman_num[s[index]]
                    index-=1
                else:
                    if s[index-1]=='I':
                        num=roman_num[s[index]]-roman_num[s[index-1]]
                        final_num+=num
                        index-=2
                    else:
                        final_num+=roman_num[s[index]]
                        index-=1
            elif s[index]=='L' or s[index]=='C':
                if index==0:
                    final_num+=roman_num[s[index]]
                    index-=1
                else:
                    if s[index-1]=='X':
                        num=roman_num[s[index]]-roman_num[s[index-1]]
                        final_num+=num
                        index-=2
                    else:
                        final_num+=roman_num[s[index]]
                        index-=1
            elif s[index]=='D' or s[index]=='M':
                if index==0:
                    final_num+=roman_num[s[index]]
                    index-=1
                else:
                    if s[index-1]=='C':
                        num=roman_num[s[index]]-roman_num[s[index-1]]
                        final_num+=num
                        index-=2
                    else:
                        final_num+=roman_num[s[index]]
                        index-=1
            else:
                final_num+=roman_num[s[index]]
                index-=1
        return final_num

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UGOTNOSHOT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值