leetcode_p13_罗马数字转换为整数——js实现
题目: 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;
}
};
推荐阅读
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- leetcode|leetcode 92. 反转链表 II
- 二叉树路径节点关键值和等于目标值(LeetCode--112&LeetCode--113)
- LeetCode算法题-11.|LeetCode算法题-11. 盛最多水的容器(Swift)
- LeetCode(03)Longest|LeetCode(03)Longest Substring Without Repeating Characters
- Leetcode|Leetcode No.198打家劫舍
- [leetcode数组系列]1两数之和
- 数据结构和算法|LeetCode 的正确使用方式
- leetcode|今天开始记录自己的力扣之路
- LeetCode|LeetCode 876. 链表的中间结点