203 字
1 分钟
罗马数字转整数:识别特殊减法对

罗马数字通常从左到右累加;IVIXXLXCCDCM 是需要整体处理的减法组合。代码用一个单字符映射和一个双字符映射分别处理它们。

class Solution {
public:
int romanToInt(string s) {
map<char, int> m = {
{'I', 1}, {'V', 5}, {'X', 10}, {'L', 50},
{'C', 100}, {'D', 500}, {'M', 1000}
};
map<string, int> n = {
{"IV", 4}, {"IX", 9},
{"XL", 40}, {"XC", 90},
{"CD", 400}, {"CM", 900}
};
int res = 0;
for(int i = 0; i < s.size(); i ++ ) {
if(i + 1 < s.size()) {
string t = s.substr(i, 2);
if(n.count(t)) {
res += n[t];
i ++;
continue;
}
}
res += m[s[i]];
}
return res;
}
};

复杂度#

  • 时间复杂度:O(n)O(n)
  • 空间复杂度:O(1)O(1);符号映射大小固定。
判断条件

不必逐一枚举 IVIX 等减法组合。比较当前字符与下一个字符,就能统一覆盖全部合法减法对。

罗马数字转整数:识别特殊减法对
https://blog.xqcherry.top/posts/algorithms/roman-to-integer/
作者
xqcherry
发布于
2026-09-20
许可协议
CC BY-NC-SA 4.0