13. 罗马数字转整数

本文最后更新于:25 天前

13. 罗马数字转整数

题目描述

规则同题【12.整数转罗马数字】,只是转换方向相反,由罗马数字转换为整数。

题解

解法一:从小到大遍历

由于罗马数字中,”V”、”X”、”L”、”C”、”D”、”M” 这几个字符可能存在前缀,因此当遇到这几个字符时,需要额外判断前一位是否为对应的前缀。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
class Solution {
public:
int romanToInt(std::string s) {
int x = 0;
for (int i = s.size() - 1; i >= 0; i--) {
if (s[i] == 'I') {
x += 1;
} else if (s[i] == 'V') {
if (i > 0 && s[i - 1] == 'I') {
x += 4;
i--;
} else {
x += 5;
}
} else if (s[i] == 'X') {
if (i > 0 && s[i - 1] == 'I') {
x += 9;
i--;
} else {
x += 10;
}
} else if (s[i] == 'L') {
if (i > 0 && s[i - 1] == 'X') {
x += 40;
i--;
} else {
x += 50;
}
} else if (s[i] == 'C') {
if (i > 0 && s[i - 1] == 'X') {
x += 90;
i--;
} else {
x += 100;
}
} else if (s[i] == 'D') {
if (i > 0 && s[i - 1] == 'C') {
x += 400;
i--;
} else {
x += 500;
}
} else if (s[i] == 'M') {
if (i > 0 && s[i - 1] == 'C') {
x += 900;
i--;
} else {
x += 1000;
}
}
}
return x;
}
};

13. 罗马数字转整数
https://ccccx159.github.io/2024/04/12/leetcode/13.罗马数字转整数/
作者
Xu@n Ch3n
发布于
2024年4月12日
更新于
2024年4月18日
许可协议