13. Roman to Integer
题目描述
将罗马数字转化为十进制数字
思路
因为涉及到加法和减法,VI IV/IX两种情况
如果遇到小的在左边,大的在右边那就是一次减法
代码
class Solution {
public:
int romanToInt(string s) {
map<char, int> hm;
hm['I'] = 1;
hm['V'] = 5;
hm['X'] = 10;
hm['L'] = 50;
hm['C'] = 100;
hm['D'] = 500;
hm['M'] = 1000;
int result = 0; // 赋值默认0,以便防护空串
for (int i = 0; i < s.size(); i++) {
char s_i = s[i];
char s_beforei = s[i-1];
if (i > 0 && hm.find(s_i)->second > hm.find(s_beforei)->second) {
result += hm.find(s_i)->second - 2 * hm.find(s_beforei)->second;
} else {
result += hm.find(s_i)->second;
}
}
return result;
}
};
Runtime: 72 ms, faster than 32.55% of C++ online submissions for Roman to Integer.