LeetCode 13 罗马数字转整数
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 |
解题流程
这条题目是上一条题目的反转,上一条由数字转罗马数字,这一条由罗马数字转数字,那么其实按照之前的逻辑一样可以使用,就是将所有的情况都罗列出来,当字符串一个个比对,如果符合就往结果中
加这个字符对应的数字,同时将字符串中的字符删掉。如果没有匹配到的话就去匹配后面的字符,直至s字符串被匹配完。
代码:
var romanToInt = function(s) { |
写完提交,超越95%的人,但是上面的解法并不完美,因为在这个过程有重复循环,比如”MMM”就需要将整个charArr循环三次才能匹配到,那么如何才能只循环一遍呢?
我们最希望的就是去循环s字符串,但是难点在于4,9开头的那些数字,因为这些数字都需要用两个字符表示。如何才能用一个字符就表示4,9呢?观察它们之间的关系,
我们发现,如果后面的字符比前面的字符代表的数字大,那么就说明这两个字符应该合起来表示为一个数,即1,5
表示4,那就可以表示为(-1 + 5)
。那代码逻辑就
很简单了,每次遍历到一个字符,就看这个字符的后一个字符是否代表的数字比当前字符大,如果大,那么需要减去当前字符代表的值,如果小,那么直接加上代表的值。
代码
var romanToInt = function(s) { |