题目
思路
这里使用的是一个unordered_map,这个是无顺序的map,因为这里需要把字符和数字映射起来,且不要求顺序性。我觉得这里是解题的关键,明确了这个映射关系,剩下的都很好计算。就是对于4和9,40和90等情况,需要判断一下如果前面的字符对应的数字小于后面的,那么需要减去,别的都不变。
代码
class Solution {
private:
unordered_map<char,int> symbolValues = {
{'I',1},
{'V',5},
{'X',10},
{'L',50},
{'C',100},
{'D',500},
{'M',1000},
};
public:
int romanToInt(string s) {
int len=s.size();
int sum=0;
for(int i=0;i<len-1;i++){
if(symbolValues[s[i+1]]>symbolValues[s[i]]){
sum=sum-symbolValues[s[i]];
}
else{
sum=sum+symbolValues[s[i]];
}
}
sum=sum+symbolValues[s[len-1]];
return sum;
}
};