Q:
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
Analysis:
可以枚举出罗马字母对应的阿拉伯数字,罗马数字来说,如果左边的字符比右边的字符小,则应该减去左边的字符,计算出整型数字;如果左边的字符大于右边的字符,则需加上右边的字符,计算出整型数字。
eg:
VI–>6
IV–>4
Code:
public class Solution {
public int romanToInt(String s) {
int result = 0;
char max = 'I';
//从后向前遍历字符串,右边字母比左边字母小加右边;右边字母比左边字母大减去左边
for (int i = s.length() - 1; i >= 0; i--) {
if (getValue(s.charAt(i)) >= getValue(max)) {
//右边字母比左边字母小加右边
max = s.charAt(i);
result += getValue(s.charAt(i));
} else {
//右边字母比左边字母大减去左边
result -= getValue(s.charAt(i));
}
}
return result;
}
/**
* 返回罗马字母对应的阿拉伯数字
*
* @param a
* @return
*/
public static int getValue(char a) {
switch (a) {
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;
}
}
}