Это является частью серии объяснений решения LeetCode ( index ). Если вам понравилось это решение или нашли его полезным, Пожалуйста, нравится Этот пост и/или upvote Мое решение по сообщению на форумах LeetCode Анкет
Задача leetCode № 12 (средняя): целое число к римскому
Описание:
( прыгнуть в : Идея решения Код : JavaScript | Python | Java | C ++
Римские цифры представлены семью различными символами: Я
, V
В X
, L
, C
, D
и M
Анкет
1 | I |
5 | V |
10 | X |
50 | L |
100 | C |
500 | D |
1000 | M |
Например, 2
написан как Ii
В римском цифре всего два собрались вместе. 12
написан как XII
, что просто X + ii
Анкет Номер 27
написан как XXVII
, что Xx + v + ii
Анкет
Римские цифры обычно написаны наибольшим для наименьшего слева направо. Однако цифра для четырех не является IIII
Анкет Вместо этого номер четыре написана как Iv
Анкет Потому что тот, который находится перед пятью, мы вычитаем его, делая четыре. Тот же принцип применим к девяти числа, который написан как Ix
Анкет Есть шесть случаев, когда используется вычитание:
-
Я
может быть размещен доV
(5
) иИкс
(10
), чтобы сделать4
и9
Анкет -
X
может быть размещен доL
(50
) иC
(100
), чтобы сделать40
и90
Анкет -
C
может быть размещен доD
(500
) иM
(1000
), чтобы сделать400
и900
Анкет
Учитывая целое число, преобразуйте его в римскую цифру.
Примеры:
Вход: | |
Выход: | “Iii” |
Вход: | |
Выход: | “IV” |
Вход: | |
Выход: | “IX” |
Вход: | |
Выход: | “Lviii” |
Объяснение: |
Вход: | |
Выход: | “McMxciv” |
Объяснение: |
Ограничения:
1
Идея:
( Прыгните к : Описание задачи Код : JavaScript | Python | Java | C ++
Так же, как Roman to Integer, эта проблема легче всего решить с помощью Таблица поиска Для преобразования между цифрой и цифрой. В этом случае мы можем легко справиться со значениями в порядке убывания и вставить соответствующее число (или цифры) столько раз, сколько мы можем, уменьшая наш целевой номер ( n ) на то же количество.
Однажды N Заканчивается, мы можем вернуть ANS Анкет
Реализация:
Java’s StringBuilder может позаботиться о повторных строковых конкатенациях без некоторых накладных расходов на создание струнных копий.
Код JavaScript:
( Прыгните к : Описание задачи Идея решения
const val = [1000,900,500,400,100,90,50,40,10,9,5,4,1] const rom = ["M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"] var intToRoman = function(N) { let ans = "" for (let i = 0; N; i++) while (N >= val[i]) ans += rom[i], N -= val[i] return ans };
Код Python:
( Прыгните к : Описание задачи Идея решения
val = [1000,900,500,400,100,90,50,40,10,9,5,4,1] rom = ["M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"] class Solution: def intToRoman(self, N: int) -> str: ans = "" for i in range(13): while N >= val[i]: ans += rom[i] N -= val[i] return ans
Код Java:
( Прыгните к : Описание задачи Идея решения
class Solution { final static int[] val = {1000,900,500,400,100,90,50,40,10,9,5,4,1}; final static String[] rom = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"}; public String intToRoman(int N) { StringBuilder ans = new StringBuilder(); for (int i = 0; N > 0; i++) while (N >= val[i]) { ans.append(rom[i]); N -= val[i]; } return ans.toString(); } }
C ++ Код:
( Прыгните к : Описание задачи Идея решения
class Solution { public: const int val[13] = {1000,900,500,400,100,90,50,40,10,9,5,4,1}; const string rom[13] = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"}; string intToRoman(int N) { string ans = ""; for (int i = 0; N; i++) while (N >= val[i]) ans += rom[i], N -= val[i]; return ans; } };
Оригинал: “https://dev.to/seanpgallivan/solution-integer-to-roman-1n3o”