题目大意:
把罗马文转换成数字
思路:
将字符串从后往前计算,每次以最后一个字符的大小来判断数字的每一段范围,如果前面的字符和它相等,可以直接相加,如果前面的字符比它小,就减掉对应的值,如果比它大,就断开,把前面那一部分作为下一次遍历的字符串;
这里用一个map存储了字符与值的对应;
代码:
class Solution {
public:
int romanToInt(string s) {
map<char,int> m;
m['M']=1000;
m['D']=500;
m['C']=100;
m['L']=50;
m['X']=10;
m['V']=5;
m['I']=1;
int ans=0;
while(s!=""){
int i=s.length()-1;
ans+=m[s[i]];
int j;
for(j=i-1;j>=0;j--){
if(m[s[j]]==m[s[i]]){
ans+=m[s[j]];
}
else if(m[s[j]]<m[s[i]]){
ans-=m[s[j]];
}
else break;
}
if((i-j)==s.length()) s="";
else s=s.substr(0,j+1);
}
return ans;
}
};
感觉自己的代码还有很多不足,写得很费力。