leetcode刷题笔记之罗马数字转化为数字
来源:互联网 发布:网络光端机指示灯 编辑:程序博客网 时间:2024/06/06 02:13
leetcode刷题笔记之罗马数字转化为数字
题目信息
题目地址:https://oj.leetcode.com/problems/roman-to-integer/
题目要求
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
相关资料
- 罗马数字的维基百科
- docutils中的解决方案(注:需要安装docutils模块)
In [9]: from docutils.utils import romanIn [10]: roman.fromRoman('XII')Out[10]: 12
我的答案
class Solution: symbols = ['I','V','X','L','C','D','M'] values = [1, 5, 10, 50, 100, 500, 1000] symbol_list = [] value_list = [] for i in range(len(symbols)/2): index = i*2 symbol_list.extend([symbols[index]*j for j in range(1,4)]) # I, II, III value_list.extend([values[index]*j for j in range(1,4)]) symbol_list.append(symbols[index]+symbols[index+1]) # IV value_list.append(values[index+1]-values[index]) symbol_list.append(symbols[index+1]) # V value_list.append(values[index+1]) symbol_list.extend([symbols[index+1]+symbols[index]*j for j in range(1,4)]) # VI, VII, vIII value_list.extend([values[index+1]+values[index]*j for j in range(1,4)]) symbol_list.append(symbols[index]+symbols[index+2]) # IX value_list.append(values[index+2]-values[index]) # IX symbol_list.extend(['M','MM','MMM']) value_list.extend([1000, 2000, 3000]) roman_map = dict(zip(symbol_list,value_list)) # @return an integer def romanToInt(self, s): result = 0 for symbol in self.symbol_list[::-1]: if s.find(symbol) == 0: result += self.roman_map[symbol] s = s[len(symbol):] return resultif __name__ == '__main__': s = Solution() print s.romanToInt('XCVII')
思路:
- 将每一个单位字符代表的数字列出来,排序后放在
symbol_list
中,将映射关系放在roman_map
里。即罗马字符表为['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC', 'C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM', 'M', 'MM', 'MMM']
,对应的数字为[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 2000, 3000]
- 拿到罗马字符后,从后往前遍历罗马字符表,若找到对应的字符则移除该字符,并将结果加入数字中。如此循环,知道所有罗马字符被遍历完。
- 在类中写的代码只需执行一次,可以将得到的罗马字符表拿出来,直接放进程序里。此处为保留过程留了下来。
- 该思路未对错误的罗马字符进行处理,很多实现上不如docutils中的解决方案,读者可参考那个版本。
0 0
- leetcode刷题笔记之罗马数字转化为数字
- LeetCode OJ 之 Integer to Roman (整数转化为罗马数字)
- [LeetCoce 13] Roman to Integer 罗马数字转化为数字
- 阿拉伯数字转化为罗马数字
- [LeetCode]13. Roman to Integer(罗马数字转化为整数)
- [LeetCode]12. Integer to Roman(整数转化为罗马数字)
- 数字转换为罗马数字
- LeetCode-13-Roman to Integer(罗马数字转换为整型数字)
- LeetCode学习(2) 将罗马数字转换为数字
- Leetcode 13题 罗马数字转换为整形
- 将罗马数字转化为整数
- 13.罗马数字转化为整型
- [LeetCode]罗马数字转为普通数字
- leetcode中字符串转化为数字
- 【leetcode】第12题:将数字转换成罗马数字
- 12.阿拉伯数字转化为罗马数字1-3999
- 13.罗马数字转化为阿拉伯数字1-3999
- Roman to Integer 罗马数字转化为整数
- Javascript定时器(一)——单线程
- hdu steps 1.2.4 Buildings
- 王垠:如何掌握程序语言
- vs2013 调试时不显示vector内容的解决方法.
- Java操作MongoDB (第二篇)
- leetcode刷题笔记之罗马数字转化为数字
- unicast multicast broadcast的区别
- Javascript定时器(二)——setTimeout与setInterval
- 电脑视频投射到电视屏幕
- JavaWeb:Jsp如何指定Action(多个方法)中的一个方法
- 每天一个JavaScript实例-动态省份选择城市
- poj 3253 Fence Repair
- c语言从一个源代码文件到生成可执行文件的过程
- HDU-4035--Maze (概率dp)