题目:
Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 to 3999.
解决思路:
- 罗马数字的表示 'I': 1,'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000
- 从左向右遍历罗马数字,若当前数字(cur)小于或等于上一个数字
(pre),则相加;
- 若当前数大于上一个数,则result = result - 2 * pre + cur;(减去两倍pre是因为之前result中包含已经加过一次的 pre)
- 测试用例:‘MCMCXCVI’:1996
该罗马数字转换时应拆为M,CM,XC, VI几个数之和
var romanToInt = function(s) {
var map = {
'I': 1,
'V': 5,
'X': 10,
'L': 50,
'C': 100,
'D': 500,
'M': 1000
};
// result中存的是pre左侧(包括pre在内)的所有数字之和
var result = 0;
var arr = s.split('');
var pre = map[arr[0]];
var cur;
if(s.length <= 0) {
return result;
} else {
result = pre;
for (var i = 1; i < s.length; i++) {
cur = map[arr[i]];
if (cur <= pre) {
result += cur;
} else {
result = result - 2 * pre + cur;
}
pre = cur;
}
return result;
}
};
网友评论