Ruka
2 min readMar 20, 2020

--

[LeetCode][python3]0013. Roman to Integer

Start the journey
N2I -2020.03.18

  1. My first solution
class Solution:
def romanToInt(self, s: str) -> int:
rom=["M","D","C","L","X","V","I"]
digit=[1000,500,100,50,10,5,1]
result=0

if s.find("CM")>=0 or s.find("CD")>=0:
result-=200
if s.find("XC")>=0 or s.find("XL")>=0:
result-=20
if s.find("IX")>=0 or s.find("IV")>=0:
result-=2
for c in s:
for r,d in zip(rom,digit):
if c==r:
result+=d
return result
N2I -2020.03.18

Explanation:

Using find() function to solve the problem. When C+M=1000 and CM=900, this makes the result have a 200 gap. So we minus it first then count it as the same way. Same as CD,XC,XL,IX,IV.

2. Other solution

class Solution:
def romanToInt(self, s: str):
symbol={'I':1,'V':5,'X':10, 'L':50, 'C':100, 'D':500, 'M':1000}
output=[0]
for i in s:
if symbol[i]>output[-1]:
output[-1]=symbol[i]-output[-1]
else:
output.append(symbol[i])
return sum(output)
N2I -2020.03.18

Explanation:

The solution is using dict to save the pattern, and check out the special cases when smaller symbol is in front of a bigger symbol.

--

--