Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M.
Symbol Value I 1 V 5 X 10 L 50 C 100 D 500 M 1000
For example, two is written as II in Roman numeral, just two one's added together. Twelve is written as, XII, which is simply X + II. The number twenty seven is written as XXVII, which is XX + V + II.
Roman numerals are usually written largest to smallest from left to right. However, the numeral for four is not IIII. Instead, the number four is written as IV. Because the one is before the five we subtract it making four. The same principle applies to the number nine, which is written as IX. There are six instances where subtraction is used:
Ican be placed beforeV(5) andX(10) to make 4 and 9.Xcan be placed beforeL(50) andC(100) to make 40 and 90.Ccan be placed beforeD(500) andM(1000) to make 400 and 900.
Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 to 3999.
Example 1:
Input: "III" Output: 3
Example 2:
Input: "IV" Output: 4
Example 3:
Input: "IX" Output: 9
Example 4:
Input: "LVIII" Output: 58 Explanation: L = 50, V= 5, III = 3.
Example 5:
Input: "MCMXCIV" Output: 1994 Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.
如果左边的字母表示的数字小于右边的字母,则用右边的数字减去左边的数字;反之,则需要进行加法。
我们从左向右进行遍历的时候,不太好计算出结果;从右向左计算,一目了然。
//java
class Solution {
private static Map<Character, Integer> map = new HashMap() {
{
put('I', 1);
put('V', 5);
put('X', 10);
put('L', 50);
put('C', 100);
put('D', 500);
put('M', 1000);
}
};
public static int romanToInt(String s) {
int length = s.length();
int result = 0;
int preVal = 0;
for (int i = length - 1; i >= 0; i--) {
char key = s.charAt(i);
int value = map.get(key);
if (value >= preVal) {
result += value;
} else {
result -= value;
}
preVal = value;
}
return result;
}
}
博客介绍了罗马数字的表示规则,如通常从大到小书写,存在减法使用的六种情况。还给出将罗马数字转换为整数的方法,即若左边数字小于右边则相减,反之相加,且从右向左计算更清晰,输入范围在1到3999。
632

被折叠的 条评论
为什么被折叠?



