这道题思路很简单,就是比较s[i]和s[i+1]个字符代表的数,如果后者大于前者,就做减法,加到result上i=i+2;如果小于,只加s[i],++i.
首先想到的就是用一组数把他们对应起来,可以使用map
class Solution {
public:
int romanToInt(string s) {
map<char,int> RNmap;
RNmap['I']=1;RNmap['V']=5;RNmap['X']=10;
RNmap['L']=50;RNmap['C']=100;RNmap['D']=500;
RNmap['M']=1000;
int result=0,i=0;
char pre,rear;
while(i<s.size())
{
pre=s[i];rear=s[i+1];
if(RNmap[pre]<RNmap[rear])
{
result+=RNmap[rear]-RNmap[pre];
i+=2;
}
else
{
result+=RNmap[pre];
++i;
}
}
return result;
}
};
再有看到也可以强行用数字数组存储,在这个过程中,字符按照ASCII码转成数字
class Solution {
public:
int romanToInt(string s) {
int a[100] = { 0 };
a['I']=1,a['V']=5,a['X']=10,a['L']=50,a['C']=100,a['D']=500,a['M']=1000;
int result=0,i=0;
char pre,rear;
while(i<s.size())
{
pre=s[i];rear=s[i+1];
if(a[pre]<a[rear])
{
result+=a[rear]-a[pre];
i+=2;
}
else
{
result+=a[pre];
++i;
}
}
return result;
}
};