题目:
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
思路:- 罗马字符和数字的对应关系存储在map里,拿到字符串从前往后遍历,如果当前数字比后面的小,说明是减法,当做整体,如“XC” = 100-10=90,下标+2;否则的话是加法,如“II”,累加当前数字,下标+1,注意有最后一位的话,累加该数
public int romanToInt(String s) {
HashMap<Character, Integer> map = new HashMap<Character, Integer>(){
{
put('M', 1000);
put('D', 500);
put('C', 100);
put('L', 50);
put('X', 10);
put('V', 5);
put('I', 1);
}
};
int n = s.length(), count = 0, x, y;
for(int i=0; i<n; i++){
x = map.get(s.charAt(i));
if(i == n-1){
y= 0;
}else{
y = map.get(s.charAt(i+1));
}
if(x < y){
count += (y-x);
i++;
}else{
count += x;
}
}
return count;
}