罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。

字符          数值
I             1
V             5
X             10
L             50
C             100
D             500
M             1000
例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做  XXVII, 即为 XX + V + II 。

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。 
C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。

示例 1:

输入: "III"
输出: 3
示例 2:

输入: "IV"
输出: 4
示例 3:

输入: "IX"
输出: 9
示例 4:

输入: "LVIII"
输出: 58
解释: L = 50, V= 5, III = 3.
示例 5:

输入: "MCMXCIV"
输出: 1994
解释: M = 1000, CM = 900, XC = 90, IV = 4.

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/roman-to-integer
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

python 数组越界的问题

>>> list1  = [1, 2, 3]
>>> list1
[1, 2, 3]
>>> list1[1]
2

>>> list1[0:1]
[1]
>>> list1[2:3]
[3]
>>> list1[3:4]
[]
>>> list1[-1:0]
[]

python知识点

1.去掉空格

字符串去掉左侧空格:s.lstrip()

字符串去掉右侧空格:s.rstrip()

去掉左右两边空格:s.strip()

去掉所有空格:s.replace(" ", "")

正则表达式将空格替换成空 :str_new = re.sub(r"\s+", "", s)

2.新建字典

>>>dict = {'a': 1, 'b': 2, 'b': '3'}

3.遍历字典

dic1 = {'date':'2018.11.2','name':'carlber','work':"遍历",'number':3}
for i in dic1:   #遍历字典中的键print(i)for key in dic1.keys():print(key)for value in dic1.values():  #遍历字典中的值print(value)for item in dic1.items():  #遍历字典中的元素print(item)for i in dic1:print("该次循环得到的key为%s,得到的值为%s"%(i,dic1[i]))
'''
安安思路
"MCMXCIV"
遍历字符串
处理当前字符时和前一个字符连接,判断是否符合特殊情况
如果不符合,先把这个符号对应的数值加上
如果符合,要先把上一个的那个数值减掉,再对应特殊字符对应的数值加上
'''class Solution:def romanToInt(self, s: str) -> int:dict1 = {"I":1,"V":5,"X":10,"L":50,"C":100,"D":500,"M":1000  }special_case = {"IV":4,"IX":9,"XL":40,"XC":90,"CD":400,"CM":900}sum = 0tmp = 0pre = ""for i in range(len(s)):s_tmp = pre+s[i]pre = s[i]#print("s_tmp:" + s_tmp)if s_tmp in special_case.keys():sum-=tmptmp = special_case[s_tmp]pre = ""sum+=tmpcontinueelse:tmp = dict1[s[i]]sum+=tmp#print("tmp:%d" % tmp)#print("sum: %d" %sum)#print("***")return sum

自己解法的不足:

1.可以将两个字典进行合并,没有必要用两个

2.自己判断的是当前字符和前一个字符,前一个字符不用再用一个变量表示,直接用s[i-1]表示即可

3.第一个字符和最后一个字符如何判断,出现越界怎么办    见下面

#看了题解之后自己写的代码class Solution:def romanToInt(self, s: str) -> int:dict1 = {"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}sum = 0i = 0while(i < len(s)):if s[i:i+2] in dict1.keys():sum+=dict1[s[i:i+2]]i+=2elif s[i] in dict1.keys():sum+=dict1[s[i]]i+=1#print(sum)return sum

自己担心这个问题会出现最后一个字符越界的情况,结果并没有  见下

>>> list1  = [1, 2, 3]
>>> list1
[1, 2, 3]
>>> list1[1]
2
>>> list1[3]
Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    list1[3]
IndexError: list index out of range

>>> list1[0:1]
[1]
>>> list1[2:3]
[3]
>>> list1[3:4]
[]
>>> list1[-1:0]
[]

'''
还是自己之前的思路,只不过进行了调整遍历字符串
处理当前字符时和前一个字符连接,判断是否符合特殊情况
如果不符合,先把这个符号对应的数值加上
如果符合,要先把上一个的那个数值减掉,再对应特殊字符对应的数值加上
要注意第一个字符的特殊情况
'''class Solution:def romanToInt(self, s: str) -> int:dict1 = {"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}sum = 0for i in range(len(s)):if (i != 0) and (s[i-1:i+1] in dict1.keys()):sum-=dict1[s[i-1]]sum+=dict1[s[i-1:i+1]]else:sum+=dict1[s[i]]return sum

LeetCode:第13题 罗马数字转整数 python语言实现 2020.2.3相关推荐

  1. LeetCode题组:第13题-罗马数字转整数

    1.题目:回文数 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做I ...

  2. LeetCode(13)——罗马数字转整数(JavaScript)

    罗马数字包含以下七种字符:I,V, X, L,C,D 和M. 字符-------数值 I--------------1 V-------------5 X------------10 L------- ...

  3. 力扣13题---罗马数字转整数

    罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并 ...

  4. LeetCode高频题13:罗马数字转整数

    LeetCode高频题13:罗马数字转整数 提示:本题是系列LeetCode的150道高频题,你未来遇到的互联网大厂的笔试和面试考题,基本都是从这上面改编而来的题目 互联网大厂们在公司养了一大批ACM ...

  5. leetcode每日一题·买卖股票问题(Python)

    leetcode每日一题·买卖股票问题(Python) 买卖股票的最佳时机(股票最大利润) 题目链接 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的 ...

  6. c语言罗马数字换成整数,leetcode 13 罗马数字转整数 C语言

    leetcode 13 罗马数字转整数 原题 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 ...

  7. LeetCode简单-Python-(13)罗马数字转整数

    罗马数字转整数 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 I ...

  8. LeetCode第127题—单词接龙—Python实现

    title: LeetCode No.127 categories: OJ LeetCode tags: Programing LeetCode OJ LeetCode第127题-单词接龙 自己代码的 ...

  9. 罗马数字转整数Python解法

    罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符          数值 I             1 V             5 X             10 L ...

最新文章

  1. JS删除数组指定下标并添加到数组开头
  2. c语言之贪吃蛇源码,C语言之贪吃蛇经典源码
  3. C#实现bitmap图像矫正
  4. 从源码角度看Android系统init进程启动过程
  5. sysbench测试mysql性能(TPS、QPS、IOPS)(重要)
  6. pthread_create会导致内存泄露
  7. C/C++的内存泄漏检测工具Valgrind memcheck的使用经历
  8. java执行bat代码
  9. MySQL 8 + Navicat for MySQL安装步骤
  10. Android自定义LayoutManager第十一式之飞龙在天
  11. 基于工程量的智能动态计划管控
  12. mac 10.13.6 升级至10.14.6再升级至12.4
  13. 什么是Armbian
  14. 统计了300位硬件工程师的工资,我悟了
  15. md 文件使用html阅读,使用markdow-it渲染md文件为html页面
  16. Loss.backward()
  17. maven install、maven clean、project clean三者的区别
  18. Linux 桥接ping不通外网(特别是校园网) 解决方式及错误总结
  19. 微信小程序_文档_08_组件_媒体组件_地图_画布_开放能力
  20. 基于Java毕业设计业余足球队服务平台源码+系统+mysql+lw文档+部署软件

热门文章

  1. android硬件加速导致绘制,Android中的硬件加速
  2. MapReduce调优方案
  3. 一个计算机高手的成长
  4. A Knight's Journey
  5. 2020年滴春天,我认识了“飞桨PaddlePaddle”
  6. TS 浅拷贝和深拷贝方法
  7. 会中切换网络总掉线?腾讯会议用这种方案让你好好开会
  8. wlan从入门到精通第六期STA接入过程
  9. 树莓派4 Raspberry Pi 4B 正式发布和配置详解
  10. WinRAR压缩解压缩软件命令行参数