class Solution: def intToRoman(self, num: int) -> str:
rom = "IVXLCDM" lnum = str(num)
l = len( lnum )
result = ""
j = 0 m = 0 for i in range(1 , l + 1): c = lnum[ l - i ] x = int( c ) if i 5: y = x - 5 for z in range(0 , y): result = rom[j] + result result = rom[j+1] + result elif x > 0: for z in range(0 , x): result = rom[j] + result j = j + 2 else: m = x * 10 ** (i-4) for z in range(0 , m): result = rom[j] + result return result
Питон выучил по ходу, поэтому возможно использовал не самые быстрые оптимальные операторы доступа по индексу, преобразования и т.д. Но сложность алгоритма явно меньше... потому, что один цикл вложенные циклы только для выведения в итог N количество символов одинаковых, возможно есть проще оператор
как варик рекурсию добавить, чтобы погружаться до последнего символа и на возврате собирать строку, если в питоне result += rom[j] значительно быстрее result = rom[j] + result... просто не знаю как конкатенация реализована....
Клёвый туториал
class Solution:
def intToRoman(self, num: int) -> str:
rom = "IVXLCDM"
lnum = str(num)
l = len( lnum )
result = ""
j = 0
m = 0
for i in range(1 , l + 1):
c = lnum[ l - i ]
x = int( c )
if i 5:
y = x - 5
for z in range(0 , y):
result = rom[j] + result
result = rom[j+1] + result
elif x > 0:
for z in range(0 , x):
result = rom[j] + result
j = j + 2
else:
m = x * 10 ** (i-4)
for z in range(0 , m):
result = rom[j] + result
return result
Питон выучил по ходу, поэтому возможно использовал не самые быстрые оптимальные операторы доступа по индексу, преобразования и т.д. Но сложность алгоритма явно меньше... потому, что один цикл вложенные циклы только для выведения в итог N количество символов одинаковых, возможно есть проще оператор
как варик рекурсию добавить, чтобы погружаться до последнего символа и на возврате собирать строку, если в питоне result += rom[j] значительно быстрее result = rom[j] + result... просто не знаю как конкатенация реализована....