题目描述
题目要点
1,相同的数字连写,表示把这些数字加起来的效果
2,如果左边的数字比右边的数字小,那么得到的就是左边的数字减去右边的数字的结果
3,如果左边的数字比右边的数字大,那么得到的就是两者相加的结果
解法一
思路:遍历整个罗马字符串,如果前一个字符表示的数值比后一个字符表示的数值小,那么就在结果变量中减去小的这个字符代表的数值,否者就加上这个字符代表的数值
代码:
/**
* @param {string} s
* @return {number}
*/
var romanToInt = function(s) {
var I=1,V=5,X=10,L=50,C=100,D=500,M=1000;
var count=0;
for(var i=0;i<s.length;i++){
if(eval(s[i])<eval(s[i+1])){
count-=eval(s[i]);
}
else{
count+=eval(s[i]);
}
}
return count;
};
解法二
思路:将罗马字符与之相对应代表的数值存到一个对象中去,然后再遍历这个罗马字符串,每次从尾部开始用s.charAt(i)取出字符串中的一个,然后把它当作对象的属性得出该字符代表的数值,把最后一个字符代表的数值直接存入结果变量中,再判断如果前一个数比后一个大的话,就加上它,否者就减去它
代码:
/**
* @param {string} s
* @return {number}
*/
var romanToInt = function(s) {
var result = 0;
var map = {"I":1,"V":5,"X":10,"L":50,"C":100,"D":500,"M":1000};
for(var i = s.length-1; i >= 0; i--){
var roman_num = s.charAt(i);
var val = map[roman_num];
if(i < s.length-1){
var before = map[s.charAt(i+1)];
if(val < before){
val = 0- val;
}
}
result = result+val;
}
return result;
};