示例
/**
* 示例 1:
*
* 输入: s = "III"
* 输出: 3
* 示例 2:
*
* 输入: s = "IV"
* 输出: 4
* 示例 3:
*
* 输入: s = "IX"
* 输出: 9
* 示例 4:
*
* 输入: s = "LVIII"
* 输出: 58
* 解释: L = 50, V= 5, III = 3.
* 示例 5:
*
* 输入: s = "MCMXCIV"
* 输出: 1994
* 解释: M = 1000, CM = 900, XC = 90, IV = 4.
* @param args
*/
代码
public static void main(String[] args) {
Class13 class13 = new Class13();
System.out.println(class13.romanToInt("III"));
System.out.println(class13.romanToInt("IV"));
System.out.println(class13.romanToInt("IX"));
System.out.println(class13.romanToInt("LVIII"));
System.out.println(class13.romanToInt("MCMXCIV"));
}
public int romanToInt(String s) {
Map<String, 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 total = 0;
List<Integer> list = new ArrayList<>();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
String s1 = String.valueOf(c);
Integer tempValue = map.get(s1);
list.add(tempValue);
if (i + 1 < s.length()) {
char tempChar = s.charAt(i + 1);
String s2 = String.valueOf(tempChar);
if (map.get(s2) > tempValue) {
total -= tempValue;
} else {
total += tempValue;
}
} else {
total += tempValue;
}
}
System.out.println(list);
return total;
}
解析
罗马数字主要特点
ABA
若A小于B,那么数值是B-A+A,根据位置的不同计算不同的数值,需要判断数字在哪个位置,与下一个数字进行比较
可以先把所有罗马字转换成数值,然后再进行对比、计算