力扣上面的每日一题
描述:通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。
思路:字符串转字符数组然后遍历,比较当前字符和后一位的大小,如果是逆序就做减法正序做加法
const romanToInt = function(s) {
let result = 0;
const map = { I:1, V: 5, X:10, L:50, C:100, D:500, M:1000 };
//将字符串转数组,并转成自然序列
const array = s.split("").reverse();
for(let i=0; i < array.length; i++){
const current = map[array[i]];
const next = map[array[i+1]];
//如果后一位大于前一位,直接求和,指针后移一位
if(current <= next){
result = result + current;
}else{
//求和再求差,指针后移两位
if(array[i+1]){
result = result + current - next;
i++;
}else{
//如果后一位是undined则循环结束,注意这里不一定能作为返回值
result = result + current;
}
}
}
return result;
};