【发布时间】:2018-09-14 12:42:14
【问题描述】:
我尝试解决 Leedcode 问题 13,问题是给定一个罗马数字,将其转换为整数。(输入保证在 1 到 3999 的范围内。) 这是我下面的代码,我想知道为什么它只将罗马数字中的第一个字符转换为整数?
var romanToInt = function(s) {
var result = 0;
if (s == null) {
result = 0;
}
var myMap = new Map();
myMap.set('I', 1);
myMap.set('V', 5);
myMap.set('X', 10);
myMap.set('L', 50);
myMap.set('C', 100);
myMap.set('D', 500);
myMap.set('M', 1000);
var len = s.length;
for (var i = 0; i < len; i++) {
if (myMap.get(s.charAt(i)) < myMap.get(s.charAt(i + 1))) {
result -= myMap.get(s.charAt(i))
} else {
result += myMap.get(s.charAt(i))
}
return result;
};
}
console.log(romanToInt('VI'));
console.log(romanToInt('V'));
console.log(romanToInt('VII'));
【问题讨论】:
-
顺便说一句,每个函数调用都会重新创建整个 Map。你应该把它移到你的函数之外。
-
@cece 你的逻辑没问题,在循环后面加上“return”语句,因为你计算和返回的时间是同时的。
标签: javascript integer roman-numerals