Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
Solution:
字母的值如下:
I —— 1
V —— 5
X —— 10
L —— 50
C —— 100
D —— 500
M —— 1000
......
Only need to note that for I, X and C, these three letters can be placed before other letters to form subtraction. 只有 I, X, C 可以放在其他字母前面来做减法。
I 只会出现在 V 前面表示 V(5)- n * 1
X 只会出现在 L 前面表示 L(50)- n * 10
C 只会出现在 D 前面表示 D(500)- n * 100
处理罗马数字的字符串的思路是:
<u>从右往左</u>逐个字母累加,
如果当前累加的和大于等于5的时候遇到 I,说明该 I 前面必有 V,则该 I 表示 -1 而非 +1;
如果当前累加的和大于等于50的时候遇到 X,说明该 X 前面必有 L,则该 X 表示 -10 而非 +10
如果当前累加的和大于等于500的时候遇到 C,说明该 C 前面必有 D,则该 C 表示 -100 而非 +100
public class Solution
{
public int romanToInt(String s)
{
int length = s.length();
int value = 0;
for(int i = length - 1; i >= 0; i--)
{
switch(s.charAt(i))
{
case 'I':
value += (value >= 5 ? -1 : 1);
break;
case 'V':
value += 5;
break;
case 'X':
value += (value >= 50 ? -10 : 10);
break;
case 'L':
value += 50;
break;
case 'C':
value += (value >= 500 ? -100 : 100);
break;
case 'D':
value += 500;
break;
case 'M':
value += 1000;
break;
}
}
return value;
}
}