Jan 122021
 

把罗马数字转换成阿拉伯数字,这个题目让我好好学习了一下罗马数字

https://leetcode.com/problems/roman-to-integer/

class Solution:
    def romanToInt(self, s: str) -> int:
        d = {'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000,'IV':4,'IX':9,'XL':40,'XC':90,'CD':400,'CM':900}
        result = 0
        i = 0
        while i<len(s):
            if s[i:i+2] in d:
                result=result+d[s[i:i+2]]
                i=i+2
                continue
            elif s[i:i+1] in d:
                result=result+d[s[i:i+1]]
                i=i+1
        return result

代码理解

  1. 创建了一个字典,输入相关的罗马的数字的对应阿拉伯数字
  2. 设置result 变量,作为结果的输出
  3. s = “MCMXCIV” 作为例子来理解代码
  4. 第一轮,对字符串取前两位,MC,如果在字典里,那么就把放到result里,因为MC不在字典,所以为False,不会执行下面的代码,直接跳到elif ,那么这时候,就看第一个字母是否在字典里,如果在,那么就把结果加入到result里,这个时候,result就是1000。并且i 变成1
  5. 第二轮,我们取第二,第三位,CM,看看是否在字典里,刚好在,CM是900,那么就放到result里面,现在result就变成1900,i 变成3. continue 导致继续循环,到下面2位
  6. 第三轮,还是2位,XC,也刚好是在字典,90,
  7. 第四轮,最后2位,也是在字典,4.

写的也是非常巧妙。先拿两位到字典查询,如果没有,再拿一位取查询。

 Leave a Reply

(required)

(required)

This site uses Akismet to reduce spam. Learn how your comment data is processed.