0013. Roman to Integer #
题目 #
-
罗马数字包含七种字符:
I
,V
,X
,L
,C
,D
和M
。 -
字符 数值 I
1
V
5
X
10
L
50
C
100
D
500
M
1000
-
例如, 罗马数字
2
写做II
,12
写做XII
,27
写做XXVII
。 -
罗马数字中小数字通常位于大数字的右侧,但存在以下六种特例
I
可以放在V (5)
和X (10)
的左边,来表示4
和9
。X
可以放在L (50)
和C (100)
的左边,来表示40
和90
。C
可以放在D (500)
和M (1000)
的左边,来表示400
和900
。
-
给定一个罗马数字,将其转换为整数。
思路 #
模拟 #
代码 #
模拟 #
class Solution {
public int romanToInt(String s) {
int ans = 0;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == 'V') ans += 5;
else if (s.charAt(i) == 'L') ans += 50;
else if (s.charAt(i) == 'D') ans += 500;
else if (s.charAt(i) == 'M') ans += 1000;
else if (s.charAt(i) == 'I') {
if (i + 1 < s.length() && s.charAt(i + 1) == 'V') { ans += 4; i += 1; }
else if (i + 1 < s.length() && s.charAt(i + 1) == 'X') { ans += 9; i += 1; }
else ans += 1;
}
else if (s.charAt(i) == 'X') {
if (i + 1 < s.length() && s.charAt(i + 1) == 'L') { ans += 40; i += 1; }
else if (i + 1 < s.length() && s.charAt(i + 1) == 'C') { ans += 90; i += 1; }
else ans += 10;
}
else if (s.charAt(i) == 'C') {
if (i + 1 < s.length() && s.charAt(i + 1) == 'D') { ans += 400; i += 1; }
else if (i + 1 < s.length() && s.charAt(i + 1) == 'M') { ans += 900; i += 1; }
else ans += 100;
}
}
return ans;
}
}