LeetCode算法--罗马数字转整数

题目:将罗马数字转为整数,罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。对应结构为:

1
2
3
4
5
6
7
8
字符  数值
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。下面情况为特殊情况:

  • I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
  • X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。 
  • C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。

解析:看到这个题,我突然就想到了选择排序的思想。我们通过记住当前位置的值,比较相邻位置的大小来决定计算方式,是加还是减。就这么简单。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
const roman = { I:1, V:5, X:10, L:50, C:100, D:500, M:1000 }
var romanToInt = (s) => {
if (!s) return
let sum = 0
let pre = roman[s[0]]
for (let i = 0; i < s.length; i++) {
let num = roman[s[i]]
// 这里为特殊情况说明是左边比右边小
if (pre < num) {
sum -= pre
} else {
sum += pre
}
// 更新pre的值
pre = num
}
sum += pre
return sum
}
console.log(romanToInt('III')) // 3
console.log(romanToInt('IV')) // 4

That’s all!十大基础算法是重点,这就是九阳神功内功心法,一通百通。

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2015-2022 Lee
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信