个人思路总结:
建立一个哈希表(其实在C++里面就是map容器),将符号和对应的数值一一映射到哈希表中(key为字符,value为数值)。然后对输入字符串一一从左往右遍历,如果当前字符对应的数值小于其右边字符对应的数值,则用当前结果减去该数值。否则,加上该数值。
代码如下:
class Solution {
public:
int romanToInt(string s) {
map<char,int> hashmap;
int result = 0;
int num_range[] = {1000,500,100,50,10,5,1};
char reps[] = {'M','D','C','L','X','V','I'};
for(int i=0;i<7;i++)
hashmap[reps[i]] = num_range[i];
int i=0;
for(i=0;i<s.size()-1;i++)
{
if(hashmap[s[i]]<hashmap[s[i+1]])
result -= hashmap[s[i]];
else
result += hashmap[s[i]];
}
result += hashmap[s[i]];
return result;
}
};