LeetCode:第13题 罗马数字转整数 python语言实现 2020.2.3
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况: I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。 示例 1: 输入: "III" 输入: "IV" 输入: "IX" 输入: "LVIII" 输入: "MCMXCIV" 来源:力扣(LeetCode) |
python 数组越界的问题 >>> list1 = [1, 2, 3] >>> list1[0:1] 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相关推荐
- 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 ...
- LeetCode(13)——罗马数字转整数(JavaScript)
罗马数字包含以下七种字符:I,V, X, L,C,D 和M. 字符-------数值 I--------------1 V-------------5 X------------10 L------- ...
- 力扣13题---罗马数字转整数
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并 ...
- LeetCode高频题13:罗马数字转整数
LeetCode高频题13:罗马数字转整数 提示:本题是系列LeetCode的150道高频题,你未来遇到的互联网大厂的笔试和面试考题,基本都是从这上面改编而来的题目 互联网大厂们在公司养了一大批ACM ...
- leetcode每日一题·买卖股票问题(Python)
leetcode每日一题·买卖股票问题(Python) 买卖股票的最佳时机(股票最大利润) 题目链接 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的 ...
- 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 ...
- 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 ...
- LeetCode第127题—单词接龙—Python实现
title: LeetCode No.127 categories: OJ LeetCode tags: Programing LeetCode OJ LeetCode第127题-单词接龙 自己代码的 ...
- 罗马数字转整数Python解法
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L ...
最新文章
- JS删除数组指定下标并添加到数组开头
- c语言之贪吃蛇源码,C语言之贪吃蛇经典源码
- C#实现bitmap图像矫正
- 从源码角度看Android系统init进程启动过程
- sysbench测试mysql性能(TPS、QPS、IOPS)(重要)
- pthread_create会导致内存泄露
- C/C++的内存泄漏检测工具Valgrind memcheck的使用经历
- java执行bat代码
- MySQL 8 + Navicat for MySQL安装步骤
- Android自定义LayoutManager第十一式之飞龙在天
- 基于工程量的智能动态计划管控
- mac 10.13.6 升级至10.14.6再升级至12.4
- 什么是Armbian
- 统计了300位硬件工程师的工资,我悟了
- md 文件使用html阅读,使用markdow-it渲染md文件为html页面
- Loss.backward()
- maven install、maven clean、project clean三者的区别
- Linux 桥接ping不通外网(特别是校园网) 解决方式及错误总结
- 微信小程序_文档_08_组件_媒体组件_地图_画布_开放能力
- 基于Java毕业设计业余足球队服务平台源码+系统+mysql+lw文档+部署软件