题目: 罗马数字转整数
来自智得网
分析
罗马数字的排列有两种情况,在遍历字符串的过程中,需要分区该两种情况:
罗马数字一般情况下代表大数字的字符在字符串的左侧,而小数字字符在字符串的右侧,在此种情况下,字符表示的数字进行相加操作。
而在特殊情况下,小数字在大数字的左侧,此时代表的数字是右侧的数字减去左侧的数字。
为了更加高效的进行转换,可以提前将字符代表的十进制数据进行存储,因为是KV转换,所以采用Map方式存储字符对应的十进制数字。
题解
import java.util.HashMap;
import java.util.Map;
public class Solution {
public static int solute(String s) {
Map<Character, Integer> convertMap = new HashMap<>();
convertMap.put('I', 1);
convertMap.put('V', 5);
convertMap.put('X', 10);
convertMap.put('L', 50);
convertMap.put('C', 100);
convertMap.put('D', 500);
convertMap.put('M', 1000);
int result = 0;
for (int i = 0; i < s.length(); i++) {
if(i != s.length() - 1 &&
convertMap.get(s.charAt(i)) < convertMap.get(s.charAt(i + 1))) {
result -= convertMap.get(s.charAt(i));
}
else {
result += convertMap.get(s.charAt(i));
}
}
return result;
}
}