力扣-13-罗马数字转整数

13. 罗马数字转整数 - 力扣(LeetCode)

  • 多考虑数论解法,往往会简便一些步骤
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class Solution:
# 自己初步解,通过
def romanToInt1(self, s: str) -> int:
rm = ["I", "V", "X", "L", "C", "D", "M"]
num = [1, 5, 10, 50, 100, 500, 1000]
result = 0
i = 0
while i < len(s):
# i != len(s) - 1 是判断 and 后面的 i+1 是否会越界
# rm.index(s[i]) < rm.index(s[i + 1]) 判断下一位罗马数是否比当前的罗马数大
# 若大 则需要特殊规则取两者的差值,并且指针指向下一位
# 若否 则直接取当前的罗马数累积
if i != len(s) - 1 and rm.index(s[i]) < rm.index(s[i + 1]):
result += num[rm.index(s[i + 1])] - num[rm.index(s[i])]
i += 1
else:
result += num[rm.index(s[i])]
i += 1
return result

# 官方解
# 当出现特殊情况时,前一个相当于取 负值
# 与自己写的类似,但是不用在特殊情况时,移动两次指针
def romanToInt2(self, s: str) -> int:
rm = {"I" : 1, "V" : 5, "X" : 10 , "L" : 50 , "C" : 100 , "D" : 500 ,"M" : 1000 }
result = 0
for i, c in enumerate(s):
if i < len(s) - 1 and rm[c] < rm[s[i + 1]]:
result -= rm[c]
else:
result += rm[c]
return result

力扣-13-罗马数字转整数
https://blog.gutaicheng.top/2025/08/27/力扣-13-罗马数字转整数/
作者
GuTaicheng
发布于
2025年8月27日
许可协议