Roman to Integer
国庆假期前的最后一篇博客,兑现自己的诺言,跳过的题目把它补上。
跟之前的Integer to Roman类似。
仔细观察罗马数字的规律实际上核心在于:
小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数,反之相减。
仔细研究这句话:
并且记住罗马数字的特殊字符:
本题中:
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
假设现在有一罗马数字
XCVIII表示98
那么现在我们从X开始,X表示的数字10小于C100,则我们减去X,得到-10
而C表示的数字100大于V表示的5,则加上100得90
以此类推,可以得到-10+100+5+1+1+1=98
代码如下:
class Solution {
public:
int romanToInt(string s) {
int sum=0;
int strLen = s.size();
map<char,int> myMap;
myMap['I']=1;
myMap['V']=5;
myMap['X']=10;
myMap['L']=50;
myMap['C']=100;
myMap['D']=500;
myMap['M']=1000;
//vector<int> myVec(4,0);
int i=0;
int j;
while( i < strLen )
{
while(i<strLen&&myMap[s[i]] >= myMap[s[i+1]])
{
sum = sum + myMap[s[i]];
i++;
}
while(i<strLen&&myMap[s[i]] < myMap[s[i+1]])
{
sum = sum - myMap[s[i]];
i++;
}
}
return sum;
}
};
最后祝自己和共同奋斗的程序员们国庆快乐。