将字符串形式的罗马数字转换为整数形式的数字,通过观察可以发现,当表示较小数字的字母出现在表示较大数字的字母左侧时,结果需要减去较小字母表示的数字,而较小字母出现在右侧时,正常累加即可。
因此可以在遍历中先判断上一个字母表示的数字和当前字母表示的数字的大小关系,然后进行计算。字母和数字的映射可以使用HashMap存储,也可以使用switch语句表示。
class Solution {
public int romanToInt(String s) {
int sum=0;
int preNum = getVal(s.charAt(0));
for(int i=1;i<s.length();i++){
int num = s.charAt(i);
if(preNum<num){
sum -= preNum;
}else{
sum += preNum;
}
preNum = num;
}
sum += preNum;
return sum;
}
public int getVal(char ch){
switch(ch){
case'I':return 1;
case'V':return 5;
case'X':return 10;
case'L':return 50;
case'C':return 100;
case'D':return 500;
case'M':return 1000;
default: return 0;
}
}
}