LeetCode:罗马数字转整数
charAt() 方法用于返回指定索引处的字符
按照对应数字进行相加即可,但是存在IV为4等情况,对次题目本身规避了不合理的形式 如IL等(具体看题目)
public static Integer getRomanNumerals(String s){
// 初始化对应关系
Map<Character,Integer> stringIntegerMap = new HashMap<>();
stringIntegerMap.put('I',1);
stringIntegerMap.put('V',5);
stringIntegerMap.put('X',10);
stringIntegerMap.put('L',50);
stringIntegerMap.put('C',100);
stringIntegerMap.put('D',500);
stringIntegerMap.put('M',1000);
Integer romanNumerals = 0;
for(int i=0;i<s.length();i++ ){
// 如果到了最后一位,直接做加法,并跳出循环
if(i == s.length() - 1 ){
romanNumerals = romanNumerals + stringIntegerMap.get(s.charAt(i));
break;
}
// 如果后一位比前一位大,则应加(后一位 - 前一位的差值)
if(stringIntegerMap.get(s.charAt(i)) < stringIntegerMap.get(s.charAt(i+1))){
romanNumerals = romanNumerals + stringIntegerMap.get(s.charAt(i+1)) - stringIntegerMap.get(s.charAt(i));
// 这里的i++是因为出现了罗马数字组合,所以要将下一位跳过
i++;
}else{
romanNumerals = romanNumerals + stringIntegerMap.get(s.charAt(i));
}
}
return romanNumerals;
}