LeetCode:Roman to Integer
2015-11-17 15:57
411 查看
问题描述:Given a roman numeral, convert it to an integer.Input is guaranteed to be within the range from 1 to 3999.
思路:
纯模拟:
相同的数字连写,所表示的数等于这些数字相加得到的数,如:Ⅲ = 3;
小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数, 如:Ⅷ = 8;Ⅻ = 12;
小的数字,(限于Ⅰ、X 和C)在大的数字的左边,所表示的数等于大数减小数得到的数,如:Ⅳ= 4;Ⅸ= 9;
正常使用时,连写的数字重复不得超过三次。(表盘上的四点钟“IIII”例外)
在一个数的上面画一条横线,表示这个数扩大1000倍。
个位数举例
Ⅰ,1 】Ⅱ,2】 Ⅲ,3】 Ⅳ,4 】Ⅴ,5 】Ⅵ,6】Ⅶ,7】 Ⅷ,8 】Ⅸ,9 】
十位数举例
Ⅹ,10】 Ⅺ,11 】Ⅻ,12】 XIII,13】 XIV,14】 XV,15 】XVI,16 】XVII,17 】XVIII,18】 XIX,19】 XX,20】 XXI,21 】XXII,22 】XXIX,29】 XXX,30】 XXXIV,34】 XXXV,35 】XXXIX,39】 XL,40】 L,50 】LI,51】 LV,55】 LX,60】
LXV,65】 LXXX,80】 XC,90 】XCIII,93】 XCV,95 】XCVIII,98】 XCIX,99 】
百位数举例
C,100】 CC,200 】CCC,300 】CD,400】 D,500 】DC,600 】DCC,700】 DCCC,800 】CM,900】 CMXCIX,999】
千位数举例
M,1000】 MC,1100 】MCD,1400 】MD,1500 】MDC,1600 】MDCLXVI,1666】 MDCCCLXXXVIII,1888 】MDCCCXCIX,1899 】MCM,1900 】MCMLXXVI,1976】 MCMLXXXIV,1984】 MCMXC,1990 】MM,2000 】MMMCMXCIX,3999】
C++代码:
思路:
纯模拟:
基本字符 | I | V | X | L | C | D | M |
相应的阿拉伯数字表示为 | 1 | 5 | 10 | 50 | 100 | 500 | 1000 |
小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数, 如:Ⅷ = 8;Ⅻ = 12;
小的数字,(限于Ⅰ、X 和C)在大的数字的左边,所表示的数等于大数减小数得到的数,如:Ⅳ= 4;Ⅸ= 9;
正常使用时,连写的数字重复不得超过三次。(表盘上的四点钟“IIII”例外)
在一个数的上面画一条横线,表示这个数扩大1000倍。
个位数举例
Ⅰ,1 】Ⅱ,2】 Ⅲ,3】 Ⅳ,4 】Ⅴ,5 】Ⅵ,6】Ⅶ,7】 Ⅷ,8 】Ⅸ,9 】
十位数举例
Ⅹ,10】 Ⅺ,11 】Ⅻ,12】 XIII,13】 XIV,14】 XV,15 】XVI,16 】XVII,17 】XVIII,18】 XIX,19】 XX,20】 XXI,21 】XXII,22 】XXIX,29】 XXX,30】 XXXIV,34】 XXXV,35 】XXXIX,39】 XL,40】 L,50 】LI,51】 LV,55】 LX,60】
LXV,65】 LXXX,80】 XC,90 】XCIII,93】 XCV,95 】XCVIII,98】 XCIX,99 】
百位数举例
C,100】 CC,200 】CCC,300 】CD,400】 D,500 】DC,600 】DCC,700】 DCCC,800 】CM,900】 CMXCIX,999】
千位数举例
M,1000】 MC,1100 】MCD,1400 】MD,1500 】MDC,1600 】MDCLXVI,1666】 MDCCCLXXXVIII,1888 】MDCCCXCIX,1899 】MCM,1900 】MCMLXXVI,1976】 MCMLXXXIV,1984】 MCMXC,1990 】MM,2000 】MMMCMXCIX,3999】
C++代码:
class Solution { public: int romanToInt(string s) { int result = change(s[0]); for(int i = 1;i < s.length();++i){ if(change(s[i - 1]) < change(s[i])){ result += change(s[i]) - 2 * change(s[i - 1]); }else{ result += change(s[i]); } } return result; } int change(char ch){ switch(ch){ case 'I': return 1; case 'V': return 5; case 'X': return 10; case 'L': return 50; case 'C': return 100; case 'D': return 500; case 'M': return 1000; } return 0; } };
相关文章推荐
- 【Unity开发】Unity2D多分辨率屏幕适配方案(IOS露出天空盒解决办法)
- Git使用—更新github上最新的代码至本地
- 确保底部RadioGroup不会被输入法顶上去
- sevletconfig的实现 hashmap 重写sessionID sax解析xml文件的优点 模型驱动开发技术
- ORACLE常用SQL优化hint语句
- C#编程实现取整和取余的方法
- 【Asp.Net MVC】asp.net mvc Model验证总结及常用正则表达式
- IE6不兼问题之Internet Explorer 无法打开 internet站点……
- 一段正常文本变成问号的原因
- Visual Studio 2013 编译CEF步骤
- QTreeView 限制特定的深度、特定深度下的列 是否可以编辑
- 使用Java编写一个简单的Web的监控系统
- delphi精要学习3
- 解决hibernate懒加载的问题的几种方式
- 主机字节序+网络字节序
- 关于Xcode 遇到的 警告、错误 处理
- centos7 配置ftp服务器
- V$SESS_TIME_MODEL解释
- sublime技巧
- Linux内核图集