Рубрики
Без рубрики

Решение: целое число к римскому

Это является частью серии объяснений решений LeetCode (индекс). Если вам понравилось это решение или fou … с меткой алгоритмы, JavaScript, Java, Python.

Это является частью серии объяснений решения 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”