一、题目:13. 罗马数字转整数
二、题目解析:
- 给你一个罗马数字,要求你给出它相应的整数
- 对于一般情况,只需要将每个罗马字符依次转化为相应的整数,然后相加,就可以得到相应的整数了。
- 但是还是有一些特殊的情况,比如 4 、 9 等数字,需要用 IV 、IX 的形式表示出来,不能用一个字符来确定,这就让我们加了难度。但是仔细观察,这些情况都有一个特性一一前一个必然比当前位小,所以我们只需要减去前一位即可。
三、实现思路:
- 遍历罗马数字的每个字符,从右到左。
- 用 match 方法获取当前字符代表的数字。
- 如果当前数字小于后面一个数字,说明当前数字为负数,需要减去它。否则,将它加到结果中。
- 返回结果。
四、代码实现:
public int match(char x) {
if (x == 'I') return 1;
if (x == 'V') return 5;
if (x == 'X') return 10;
if (x == 'L') return 50;
if (x == 'C') return 100;
if (x == 'D') return 500;
return 1000;
}
public int romanToInt(String s) {
int res = 0;
for (int i = 0; i < s.length(); i++) {
if (i != s.length() - 1 && match(s.charAt(i)) < match(s.charAt(i + 1))) {
res -= match(s.charAt(i));
} else {
res += match(s.charAt(i));
}
}
return res;
}
五、测试结果:
六、总结
- 这道题的解法比较巧妙,可以通过判断当前字符与前一个字符的大小关系,从而得出当前字符代表的数字应该是加数还是减数。
- 需要注意的是,最后一个字符对应的数字一定是加数,不能通过判断大小关系来处理。
七、结束