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