题目:
给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。
示例:
输入: "MCMXCIV"
输出: 1994
解释: M = 1000, CM = 900, XC = 90, IV = 4.
代码:
public class Test9 {
public static void main(String[] args) {
int iii = new Test9().romanToInt("III");
System.out.println(iii);
}
public int romanToInt(String s) {
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("I", 1);
map.put("IV", 4);
map.put("V", 5);
map.put("IX", 9);
map.put("X", 10);
map.put("XL", 40);
map.put("L", 50);
map.put("XC", 90);
map.put("C", 100);
map.put("CD", 400);
map.put("D", 500);
map.put("CM", 900);
map.put("M", 1000);
int length = s.toCharArray().length;
int i = 0;
int result = 0;
if (length==1) {
return map.get(s);
}else{
while (i <= length-1) {
if (i==length-2) {
String substring = s.substring(i, i + 2);
if (map.get(substring) != null) {
result += map.get(substring);
i = i + 2;
} else{
String substring1 = substring.substring(0,1);
String substring2 = substring.substring(1,2);
result +=map.get(substring1);
result +=map.get(substring2);
}
i = i + 2;
}else if(i==length-1){
String substring = s.substring(i, i + 1);
result += map.get(substring);
i = i+1;
} else {
String substring = s.substring(i, i + 2);
if (map.get(substring) != null) {
result += map.get(substring);
i = i + 2;
} else {
result += map.get(substring.substring(0, 1));
i = i + 1;
}
}
}
return result;
}
}
}