13. Roman to Integer
2016-03-24 20:53
483 查看
题目
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
分析
罗马字母向整数转换,小数在大数左边做减法,小数在大数右边做加法,倒序扫描字符串,用current_num保存上一次循环扫描的字符,map_it->second是当前字符,若大于则相加,同时改变current_num为当前字符,若等于则只相加,小于则只持续做减法,因为罗马字母运算规则中,当一个大数左边出现小数后,该小数左边要么是连续的该小数,要么就会比这个小数大,不会再比这个小数小,具体规则如下:V
和 X 左边的小数字只能用 Ⅰ;L 和 C 左边的小数字只能用X;D 和 M 左边的小数字只能用 C。例如:XC=90,LXXXIX=89,而不是IXC。所以一个大数左边的小数左边的数字,要么与小数相等,此时不改变current_num,仍指向大数,会持续做减法,要么大于等于大数,减法完成,分别根据两种情况做加法,只有大于大数的时候才会改变current_num。
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
分析
罗马字母向整数转换,小数在大数左边做减法,小数在大数右边做加法,倒序扫描字符串,用current_num保存上一次循环扫描的字符,map_it->second是当前字符,若大于则相加,同时改变current_num为当前字符,若等于则只相加,小于则只持续做减法,因为罗马字母运算规则中,当一个大数左边出现小数后,该小数左边要么是连续的该小数,要么就会比这个小数大,不会再比这个小数小,具体规则如下:V
和 X 左边的小数字只能用 Ⅰ;L 和 C 左边的小数字只能用X;D 和 M 左边的小数字只能用 C。例如:XC=90,LXXXIX=89,而不是IXC。所以一个大数左边的小数左边的数字,要么与小数相等,此时不改变current_num,仍指向大数,会持续做减法,要么大于等于大数,减法完成,分别根据两种情况做加法,只有大于大数的时候才会改变current_num。
class Solution { public: int romanToInt(string s) { map<char,int> map_roman; map_roman.insert(pair<char,int>('I',1)); map_roman.insert(pair<char,int>('X',10)); map_roman.insert(pair<char,int>('C',100)); map_roman.insert(pair<char,int>('M',1000)); map_roman.insert(pair<char,int>('V',5)); map_roman.insert(pair<char,int>('L',50)); map_roman.insert(pair<char,int>('D',500)); map<char,int>::iterator map_it; int sum=0; int current_num=map_roman.find(s[s.size()])->second; for(int i=s.size();i>-1;i--) { map_it=map_roman.find(s[i]); if(map_it->second>current_num) { sum=sum+map_it->second; current_num=map_it->second; } else if(map_it->second==current_num) { sum=sum+map_it->second; } else { sum=sum-map_it->second; } } return sum; } };
相关文章推荐
- HDU1561 The more, The Better(树形dp)
- JavaEE初学者的学后感
- leetcode 145. Binary Tree Postorder Traversal
- 单链表的创建
- 《世界是数字的》---读后笔记
- 有趣的for循环
- PCA主成分分析过程及理论
- python使用PIL库报错,'NoneType' object has no attribute 'bands'
- 187. Repeated DNA Sequences | Java最短代码实现
- HDU 3001 Travelling 三进制状压DP
- after会在元素内容后面而不是元素后面插入一个伪元素
- Mac 下安装MySQL5.7.6版本时,修改安装生成的root临时密码时遇到的一个问题
- 如何把一个命令加入到某个用户sudo的列表中
- Overload(重载) Override(覆写)Overwrite(重写)
- NY488 素数环
- excel导入mysql(用PHP-ExcelReader 方法),日期时间出错的处理办法
- 你不知道的HashMap与HashSet
- Linux命令操作文件,发布代码到服务
- 在linux中安装JDK(tar.gz)
- 一些常用网址