原题在这里。
简单翻译一下。
罗马数字用7个不同的符号表示,I, V, X, L, C, D 和 M.
符号 值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
I在V或者X前面表示4和9。
X在L或者C前面表示40和90。
C在D或者M前面表示400和900。
题目是,指定一个罗马数字。将它转换为整数,罗马数字的范围是1-3999。
举几个例子
Input: "III"
Output: 3
Input: "IV"
Output: 4
Input: "IX"
Output: 9
Input: "LVIII"
Output: 58
Explanation: C = 100, L = 50, XXX = 30 and III = 3.
Input: "MCMXCIV"
Output: 1994
Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.
思路:通过给出的几个例子,我们发现如果I、X、C出现的同时,它们右边的数比它们大,那么这时候I、X、C要取负数,所以我们从后向前遍历罗马数字。
下面是代码:
function roman_to_integer(roman){
var result = 0;
var map = {"I":1,"V":5,"X":10,"L":50,"C":100,"D":500,"M":1000};
for(var i = roman.length-1; i >= 0; i--){
var roman_num = roman.charAt(i);
var val = map[roman_num];
if(i < roman.length-1){
var before = map[roman.charAt(i+1)];
if(val < before){
val = 0- val;
}
}
result = result+val;
}
return result;
}
console.log(roman_to_integer("MMMCMXCIX"));