leetcode之路013 Roman to Integer
来源:互联网 发布:linux服务器性能优化 编辑:程序博客网 时间:2024/04/30 04:05
题目大意:将罗马数字转换为整数,输入范围为1-3999。对照表如下:
I
V
X
L
C
D
M
1
5
10
50
100
500
1000
思路:1、用map记录对照表,对输入字符进行查找对应值。
2、处理length为0和为1的情况。
3、当i不为倒数第二位,取出s[i]和s[i+1],求出对应值为te1和te2,判断其值大小,
若te1>te2:此时必定可以加上te1的值,并将i指向下一个元素。
若te1=te2:相等,必定可以加上te1和te2的值,并将i指向下下个元素。
若te1<te2:必定可以加上te1-te2的值,并指向下下个元素,此时即为表示4或者9,40,90等等时。
下面是ac的代码,时间为64ms:
class Solution {public: int romanToInt(string s) { unordered_map<char,int> map;map['I']=1;map['V']=5;map['X']=10;map['L']=50;map['C']=100;map['D']=500;map['M']=1000;int i=0;int resu=0;int te1=0,te2=0;if(s.length()==0)return 0;else if(s.length()==1)resu=map[s[0]];else{while(i+1<s.length()){te1=map[s[i]];te2=map[s[i+1]];if(te1>te2){resu+=te1;++i;}else if(te1==te2){resu+=te1+te2;i+=2;}else{resu+=te2-te1;i+=2;}}if(i==s.length()-1)resu+=map[s[i]];}return resu; }};
class Solution {public: int romanToInt(string s) { int res=0; int lastValue=0; int digit; for(int i=s.size()-1;i>=0;i--){ switch(s[i]){ case 'I': digit=1; break; case 'V': digit=5; break; case 'X': digit=10; break; case 'L': digit=50; break; case 'C': digit=100; break; case 'D': digit=500; break; case 'M': digit=1000; break; } if(digit>=lastValue){ res+=digit; lastValue=digit; } else res-=digit; } return res; }};
0 0
- leetcode之路013 Roman to Integer
- leetcode之路012 Integer to Roman
- LeetCode进阶之路(Integer to Roman)
- LeetCode进阶之路(Roman to Integer)
- LeetCode之路:13. Roman to Integer
- leetcode之Roman to Integer
- LeetCode之Roman to Integer
- leetcode 之 Roman to Integer
- leetCode 之 Roman to Integer
- 【Leetcode】之Integer to Roman
- 【Leetcode】之Roman to Integer
- leetcode之Roman to Integer
- LeetCode 之 Roman to Integer
- Leetcode 之 Roman to Integer
- leetcode之Roman to Integer && Integer to Roman
- LeetCode之Integer to Roman, Roman to Integer
- LeetCode 013 Roman to Integer
- [LeetCode]013-Roman to Integer
- 初识GEL文件
- 按位异或,实现不借助临时变量的两数交换
- 浮点数转换为大写货币金额
- 骑士游历
- PermGen space
- leetcode之路013 Roman to Integer
- iOS7中edgesForExtendedLayout、extendedLayoutIncludesOpaqueBars、automaticallyAdjustsScrollViewInsets的区别
- HDU 5297 Y sequence
- 维特比算法C++实现
- gcc常见参数说明
- oracle简单统计查询
- 使用intptr_t和uintptr_t
- LeetCode Everyday -- 253
- tcp二次、三次、四次握挥手