Files
leetcode/13-roman_to_integer/python/13.py

85 lines
2.8 KiB
Python

# Roman numerals are represented by seven different symbols:
# I, V, X, L, C, D and M.
#
# Symbol Value
# I 1
# V 5
# X 10
# L 50
# C 100
# D 500
# M 1000
#
# For example, 2 is written as II in Roman numeral, just two ones added
# together. 12 is written as XII, which is simply X + II. The number 27 is
# written as XXVII, which is XX + V + II.
#
# Roman numerals are usually written largest to smallest from left to right.
# However, the numeral for four is not IIII. Instead, the number four is
# written as IV. Because the one is before the five we subtract it making four.
# The same principle applies to the number nine, which is written as IX. There
# are six instances where subtraction is used:
#
# I can be placed before V (5) and X (10) to make 4 and 9.
# X can be placed before L (50) and C (100) to make 40 and 90.
# C can be placed before D (500) and M (1000) to make 400 and 900.
#
# Given a roman numeral, convert it to an integer.
#
def romanToInt(s: str) -> int:
resultado: int = 0
for index in range(len(s)):
match s[index]:
case "I":
if (index < (len(s) - 1)) and (
s[index + 1] == "V" or s[index + 1] == "X"
):
continue
resultado += 1
case "V":
if s[index - 1] == "I" and index > 0:
resultado += 4
continue
else:
resultado += 5
case "X":
if (index < (len(s) - 1)) and (
s[index + 1] == "L" or s[index + 1] == "C"
):
continue
if s[index - 1] == "I" and index > 0:
resultado += 9
continue
else:
resultado += 10
case "L":
if s[index - 1] == "X" and index > 0:
resultado += 40
continue
else:
resultado += 50
case "C":
if (index < (len(s) - 1)) and (
s[index + 1] == "D" or s[index + 1] == "M"
):
continue
if s[index - 1] == "X" and index > 0:
resultado += 90
continue
else:
resultado += 100
case "D":
if s[index - 1] == "C" and index > 0:
resultado += 400
continue
else:
resultado += 500
case "M":
if s[index - 1] == "C" and index > 0:
resultado += 900
continue
else:
resultado += 1000
return resultado