LeetCode -[Roman to Integer] JS вариации

Это одна из проблем LeetCode, которая якобы «легкая». Это, конечно, не просто, но «дружелюбно к новичкам» после нескольких проб и ошибок, (Вот где вы будете блистать, если продолжите в том же духе!). Я не буду вдаваться в полное описание проблемы, скорее начну обсуждать ее сразу, предполагая, что вы знаете, зачем вы здесь. Если вы не знаете об этой проблеме, то вот ее суть.

Итак, поскольку вы знаете, что римские целые числа считаются с помощью нескольких английских букв. Это I, V, X, L, C, D, M и каждая из них имеет соответствующее числовое значение. Первое, что я собираюсь сделать, это сохранить эти значения в объекте.

const romanD = {
          I: 1,
          V: 5,
          X: 10,
          L: 50,
          C: 100,
          D: 500,
          M: 1000,
    };
Вход в полноэкранный режим Выход из полноэкранного режима

Теперь дело в том, что на вход будут поступать случайные данные (строки) в виде римских символов. Мы должны их суммировать. Например, если вводится ‘III’, то сумма будет равна 3, так как I имеет числовое значение 1. Таким образом, ‘XV’ будет 15 и так далее. Единственное отличие заключается в том, что если ЛЮБОЕ из вводимых значений имеет меньшее значение, чем следующее, то это будет вычитание, а не сложение. Например,

Самое первое, что я делаю — это псевдокод. Спасибо CS50!

//store the roman value {}

//split the input

//have an accumulator variable

//run a loop over

//if the curInput < nextInput (substract) else (sum up)

//return or console.log the accumulator
Вход в полноэкранный режим Выйти из полноэкранного режима

Теперь первый код с традиционным ForLoop. Он выглядит следующим образом —

Хорошо, если это слишком абстрактно для вас, вот упрощенная версия —

Надеюсь, это достаточно понятно для вас. Если нет, оставьте мне комментарий, я разберусь с этим вопросом.

Теперь еще одна вариация с циклом ForEach. Происходит это следующим образом —

Если это снова абстрактно, посмотрите на упрощенную версию. Это просто оператор if…else, который вы знаете. Обратите внимание, что мы смогли запустить ForEach здесь, так как мы split() вход, который дает нам массив. Да, я знаю, я не упоминал о них. Вот полный код …

При использовании forLoop время выполнения составляет от — 78 до 102 мс.
С forEach время выполнения составляет от — 74 до 100 мс.

Хотя качество аппаратного обеспечения вашей машины также влияет на это время.

Оцените статью
devanswers.ru
Добавить комментарий