描述:
给定一个罗马数字,将其转换成整数。
返回的结果要求在1到3999的范围内。
样例:
IV
-> 4
XII
-> 12
XXI
-> 21
XCIX
-> 99
罗马数转化成数字问题,我们需要对于罗马数字很熟悉才能完成转换。以下截自百度百科:
基本字符
|
I
|
V
|
X
|
L
|
C
|
D
|
M
|
相应的阿拉伯数字表示为
|
1
|
5
|
10
|
50
|
100
|
500
|
1000
|
class Solution {
public:
int romanToInt(string s) {
int res = 0;
unordered_map<char, int> m{{'I', 1}, {'V', 5}, {'X', 10}, {'L', 50}, {'C', 100}, {'D', 500}, {'M', 1000}};
for (int i = 0; i < s.size(); ++i) {
int val = m[s[i]];
if (i == s.size() - 1 || m[s[i+1]] <= m[s[i]]) res += val;
else res -= val;
}
return res;
}
};
注:
1.if (i == s.size() - 1 || m[s[i+1]] <= m[s[i]]) res += val;这句中
对最后一个字符的操作为加法,因为,无论最后一个字符为大或小罗马数字,都应加入结果中,例如IIV,VI
2.if 语句后有大括号, 则大括号里面所有的语句都会在if表达式为真时执行;如果没大括号,则if表达式为真时只会执行第一条语句.