「这是我参与2022首次更文挑战的第5天,活动详情查看:2022首次更文挑战」。
前言
最近参加了2022年三月份的蓝桥杯比赛,所以计划学习算法和数据结构相关知识,但是平时都是学习不持续,所以希望借此机会来学习此知识点。因为我是在校大三学生,所以后续的算法相关代码都是使用js语言来进行完成。本文更新的是leetcode算法题之--罗马数字转整数。
题目
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
例如, 罗马数字 2 写做 II ,即为两个并列的 1 。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。
通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:
示例
题解
/**
-
@param {string} s
-
@return {number} */
var romanToInt = function(s) {
var arr = s.split("");//split表示将字符串分割成数组;split("")表示无分割空格
var count=0;
var hash={//用hash表来表示这7个字母的数值
'I':1,
'V':5,
'X':10,
'L':50,
'C':100,
'D':500,
'M':1000,
}
for(var i = 0;i<arr.length;i++){//遍历循环
if(hash[arr[i]]<hash[arr[i+1]]){//如果右边数值比左边大,用右边数值-左边数值=count值
count = count+hash[arr[i+1]]-hash[arr[i]];
i=i+1;//下标前移
}else{//如果右边数值比左边小,那么直接左右数值相加,即左+右=count值
count=count+(hash[arr[i]]);
}
}
return count;
};
分析
用hash表来进行封装七个字母对应的数值,然后在用for循环来遍历和比较大小并输出。