Roman/Integer
Symbol Value
I 1
V 5
X 10
L 50
C 100
D 500
M 1000Input: "LVIII"
Output: 58
Explanation: C = 100, L = 50, XXX = 30 and III = 3.public class Solution {
public int romanToInt(String s) {
if (s == null || s.length()==0) return 0;
Map<Character, Integer> m = new HashMap<Character, Integer>();
m.put('I', 1);
m.put('V', 5);
m.put('X', 10);
m.put('L', 50);
m.put('C', 100);
m.put('D', 500);
m.put('M', 1000);
int length = s.length();
int result = m.get(s.charAt(length - 1));
// 从倒数第二位开始,如果右边一位比左边一位小或相等,说明可以直接加上当前位
// 不然就是'IX'的情况,需要减去当前位
for (int i = length - 2; i >= 0; i--) {
if (m.get(s.charAt(i + 1)) <= m.get(s.charAt(i))) {
result += m.get(s.charAt(i));
} else {
result -= m.get(s.charAt(i));
}
}
return result;
}
}Last updated