题目:
示例:
思路:一个罗马数字对应一个整数,我们可以把它们想成一个映射关系。使用一个Map集合来存储这个映射关系。由于题目中已经告诉我们,罗马数字中小的数字在大的数字右边,但也有例外,我们只需要把例外的情况诺列出来即可。
代码实现:
class Solution{
public int romanToInt(String s){
Map<Character,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 sum = 0;
int length = s.length();
for(int i = 0; i<length;i++){
// 如果小的罗马数字在左边,大的罗马数字在左边,则相减。
if(i<length-1 && s.charAt(i+1)>s.charAt(i)){
sum-=map.get(s.charAt(i));
// 反之相加。
}else{
sum +=map.get(s.charAt(i));
}
}
return sum;
}
}