Roman to Integer
Given a roman numeral, convert it to an integer.
The answer is guaranteed to be within the range from 1 to 3999.
Example
IV
-> 4
XII
-> 12
XXI
-> 21
XCIX
-> 99
Clarification
Symbol | Value |
---|---|
I | 1 |
V | 5 |
X | 10 |
L | 50 |
C | 100 |
D | 500 |
M | 1,000 |
- 同一数码最多只能出现三次,如40不可表示为XXXX,而要表示为XL。
- 在较大的罗马数字的右边记上较小的罗马数字,表示大数字加小数字。
- 在较大的罗马数字的左边记上较小的罗马数字,表示大数字减小数字。
- 左减的数字有限制,仅限于I、X、C。比如45不可以写成VL,只能是XLV。
- 但是,左减时不可跨越一个位数。比如,99不可以用IC(100 - 1)表示,是用XCIX([100 - 10] + [10 - 1])表示。
- 左减数字必须为一位,比如8写成VIII,而非IIX。
- 右加数字不可连续超过三位,比如14写成XIV,而非XIIII。(见下方“数码限制”一项。)
Solution
public class Solution {
/**
* @param s Roman representation
* @return an integer
*/
public int romanToInt(String s) {
// Use a hashmap to store roman-integer pair
HashMap<Character, Integer> map = new HashMap<>();
map.put('I', 1);map.put('V', 5);
map.put('X', 10);map.put('L', 50);
map.put('C', 100);map.put('D', 500);
map.put('M', 1000);
int res = 0;
for (int i = 0; i < s.length() ; i++) {
if(i < s.length() - 1 && map.get(s.charAt(i)) < map.get(s.charAt(i+1)) )
res -= map.get(s.charAt(i));
else
res += map.get(s.charAt(i));
}
return res;
}
}