我的想法就是扫一遍整个字符串,看对应的字符是什么数字,除开题目要求特殊的特判一下就好了。
我一开始没有预存数组,直接用的if else ,代码比较冗余。
class Solution {
public:
int romanToInt(string s) {
int sum = 0;
for( int i = 0 ; i < s.length() ; i++ ){
if( s[i] == 'I' ){
if( i + 1 < s.length() && s[i + 1] == 'V' ) sum += 4 , i++ ;
else if( i + 1 < s.length() && s[i + 1] == 'X' ) sum += 9 , i++;
else sum += 1;
}
else if( s[i] == 'X' ){
if( i + 1 < s.length() && s[i + 1] == 'L' ) sum += 40 , i++;
else if( i + 1 < s.length() && s[i + 1] == 'C' ) sum += 90 , i++;
else sum += 10;
}
else if( s[i] == 'C' ){
if( i + 1 < s.length() && s[i + 1] == 'D' ) sum += 400 , i++;
else if( i + 1 < s.length() && s[i + 1] == 'M' ) sum += 900 , i++;
else sum += 100;
}
else if( s[i] == 'V' ) sum += 5;
else if( s[i] == 'L' ) sum += 50;
else if( s[i] == 'D' ) sum += 500;
else if( s[i] == 'M' ) sum += 1000;
}
return sum;
}
};