题目
罗马数字包含以下七种字符:
I
,V
,X
,L
,C
,D
和M
。给定一个罗马数字,将其转换成整数。
字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000
例如, 罗马数字 2 写做 II ,即为两个并列的 1 。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。
输入: s = "MCMXCIV" 输出: 1994 解释: M = 1000, CM = 900, XC = 90, IV = 4.
题解
由于我们这里是将罗马数字转换为整数,但是在罗马数字中有一些粘连的罗马数字,比如
I
和V
这是两个罗马数字但是IV
这是一个罗马数字,如果直接进行转换很容易发生转换成错误的整数,所以我们这里使用正则的replace
方法将粘连的罗马数字转换为小写字母以便于做区分,转换完成后我们在赋值给出参s
,在声明一个变量res
用于合并罗马数字转为整数后的值,声明一个函数getVlaue
接受一个入参x
,这个入参我们需要传递罗马数字和将黏连罗马数字转换后的小写字母,里面使用switch
进行做出匹配,匹配到对应的罗马数字或者小写字母返回其对应的整数,接下来我们使用for
循环进行循环出参s
,在循环中我们声明一个变量num
,然后将循环中的值传递给getVlaue
使其返回对应的整数,我们将返回的整数赋值给num
,在使用res
变量和num
进行相加并将相加后的值重新赋值给res
,当循环结束后,我们将res
变量返回出去即可
/** * @param {string} s * @return {number} */ var romanToInt = function(s) { s = s.replace('IV','a'); s = s.replace('IX','b'); s = s.replace('XL','c'); s = s.replace('XC','d'); s = s.replace('CD','e'); s = s.replace('CM','f'); let res = 0 for(let i = 0;i < s.length;i++){ let num=getVlaue(s.[i]) res = res + num } return res }; function getVlaue(x){ switch(x){ 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; case 'a': return 4; case 'b': return 9; case 'c': return 40; case 'd': return 90; case 'e': return 400; case 'f': return 900; } }
坚持努力,无惧未来!