题目
罗马数字包含以下七种字符:
I
,
V
,
X
,
L
,
C
,
D
和
M
I, V, X, L,C,D 和 M
I,V,X,L,C,D和M。
例如, 罗马数字
2
2
2 写做
I
I
II
II ,即为两个并列的
1
1
1。
12
12
12 写做
X
I
I
XII
XII ,即为
X
+
I
I
X + II
X+II 。 $27 $写做
X
X
V
I
I
XXVII
XXVII, 即为
X
X
+
V
+
I
I
XX + V + II
XX+V+II 。
通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如
4
4
4 不写做
I
I
I
I
IIII
IIII,而是
I
V
IV
IV。数字
1
1
1 在数字
5
5
5 的左边,所表示的数等于大数
5
5
5 减小数
1
1
1 得到的数值
4
4
4 。同样地,数字
9
9
9 表示为
I
X
IX
IX。这个特殊的规则只适用于以下六种情况:
I
I
I 可以放在
V
(
5
)
V (5)
V(5) 和
X
(
10
)
X (10)
X(10) 的左边,来表示
4
4
4 和
9
9
9。
X
X
X 可以放在
L
(
50
)
L (50)
L(50) 和
C
(
100
)
C (100)
C(100) 的左边,来表示
40
40
40 和
90
90
90。
C
C
C 可以放在
D
(
500
)
D (500)
D(500) 和
M
(
1000
)
M (1000)
M(1000) 的左边,来表示
400
400
400 和
900
900
900。
给定一个罗马数字,将其转换成整数。
例子
- 输入:
s
=
"
L
V
I
I
I
"
s = "LVIII"
s="LVIII"
输出:
58
58
58
解释:
L
=
50
,
V
=
5
,
I
I
I
=
3.
L = 50, V= 5, III = 3.
L=50,V=5,III=3. - 输入:
s
=
"
M
C
M
X
C
I
V
"
s = "MCMXCIV"
s="MCMXCIV"
输出:
1994
1994
1994
解释:
M
=
1000
,
C
M
=
900
,
X
C
=
90
,
I
V
=
4.
M = 1000, CM = 900, XC = 90, IV = 4.
M=1000,CM=900,XC=90,IV=4.
思路
这道题的思路如果想到就很简单,但是想不到就很复杂。从左往右依次遍历,按照对应的罗马数字值依次相加,用
"
M
C
M
X
C
I
V
"
"MCMXCIV"
"MCMXCIV"举例,
[
M
=
1000
+
C
M
=
(
−
100
+
1000
)
=
900
]
=
1900
[ M = 1000 + CM = (-100 + 1000)=900 ] = 1900
[M=1000+CM=(−100+1000)=900]=1900 ,因此,我们可以看到当出现左边的数字小于右边的数字时,左边的数字要以负数相加。
- 时间复杂度:
O
(
n
)
O(n)
O(n)
- 空间复杂度:
O
(
1
)
O(1)
O(1)
class Solution:
def romanToInt(self, s: str) -> int:
dict = {'M':1000, 'D':500, 'C':100, 'L':50, 'X':10, 'V':5, 'I':1}
num = 0
for i in range(len(s)-1):
if dict[s[i]] >= dict[s[i+1]]:
num += dict[s[i]]
else:
num -= dict[s[i]]
num += dict[s[len(s)- 1]]
return num
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)