https://leetcode.com/problems/roman-to-integer/
原题的链接如上
题意解析:
题目要求把罗马数转换为阿拉伯整数,输入是一个字符串,输出是一个整数
罗马数字与整数的对应规则是:
I(1) V(5) X(10) L(50) C(100) D(500) M(1000)
解题思路:
为了方便下面的操作,先建立一个map,记录罗马数字与整数的对应关系
在遍历字符串的时候,只需要处理两类特殊情况,如
4 IV 9 IX
40 XL 90 XC.........
具体处理方法是:
如果遍历到的那个字符不是字符串的最后一个字符,检查它对应的整数值是不是它下一个字符的5分之一或者是十分之一,如果是的话,最后结果就要减去这个字符对应的整数值
除了上述情况以外, 其他情况都属于正常情况,正常情况的处理方法是,让结果加上该字符对应的整数值
题解代码如下:
<span style="font-size:24px;">public int romanToInt(String s) {
int result=0;
Map<Character,Integer> roaMap=new HashMap<Character,Integer>();
roaMap.put('I',1);
roaMap.put('V',5);
roaMap.put('X',10);
roaMap.put('L',50);
roaMap.put('C',100);
roaMap.put('D',500);
roaMap.put('M',1000);
int i=0;
while(i<s.length()){
if(i+1<s.length() && (roaMap.get(s.charAt(i+1)).equals(roaMap.get(s.charAt(i))*5) ||
roaMap.get(s.charAt(i+1)).equals(roaMap.get(s.charAt(i))*10))){
result-=(Integer)roaMap.get(s.charAt(i));
}else{
result+=(Integer)roaMap.get(s.charAt(i));
}
i++;
}
return result;
}</span>