LeetCode 13 罗马数字转整数,和第 12 题反过来,规则就一条:小的在大的左边就减。
🟢 罗马数字转整数
"III" → 3,"IV" → 4,"LVIII" → 58
罗马数字多数情况大数在左小数在右,加起来就行。例外是小在大左(IV、IX),此时小数要减掉。遍历时当前值小于下一位就减,否则加。
java
public int romanToInt(String s) {
int res = 0;
for (int i = 0; i < s.length(); i++) {
int cur = map(s.charAt(i));
int next = i + 1 < s.length() ? map(s.charAt(i + 1)) : 0;
res += cur < next ? -cur : cur;
}
return res;
}
private int map(char c) {
return switch (c) {
case 'I' -> 1; case 'V' -> 5; case 'X' -> 10;
case 'L' -> 50; case 'C' -> 100; case 'D' -> 500; case 'M' -> 1000;
default -> 0;
};
}
七种字符映射用 switch 比 HashMap 快。最后一位没有 next 取 0,cur > 0 肯定走加的分支。
这道题你踩过什么坑?或者你用别的语言实现过吗?评论区聊聊,回头复习也方便翻。