Рекорд теста кистей leetcode-682. Игра в бейсбол

Предложение поступает, копайте друзей, чтобы забрать! Я участвую в весеннем мероприятии регистрации набора 2022 года, нажмите, чтобы просмотреть подробности мероприятия .

предисловие

Сегодняшняя тема простая, ее можно смоделировать в соответствии с требованиями темы, очень просто, похоже на написание бизнес-кода, и это никак не связано с алгоритмом.

Вопрос дня

Сегодняшняя тема 682. Игра в бейсбол, сложность несложная .

  • Теперь вы бомбардир специальной игры в бейсбол. Игра состоит из нескольких раундов, и результаты прошлых раундов могут повлиять на результаты последующих раундов.

  • Когда игра началась, запись была пустой. Вы получите строковый список ops, в котором записаны операции, где ops[i] — это i-я операция, которую вам нужно записать, а ops следует следующим правилам:

  • Целое число x - указывает новый результат x, полученный в этом раунде.

  • «+» - означает, что новый балл, полученный в этом раунде, является суммой двух предыдущих баллов. Данные элемента гарантируют, что при записи этому действию всегда предшествуют две действительные оценки.

  • «D» — указывает, что новый счет в этом раунде в два раза больше предыдущего. Данные элемента гарантируют, что действительная оценка всегда присутствует до того, как это действие будет записано.

  • «C» — указывает на то, что предыдущая оценка была недействительной и удалена из записи. Данные элемента гарантируют, что действительная оценка всегда присутствует до того, как это действие будет записано.

  • Пожалуйста, верните сумму всех баллов в протоколе.

 

Пример 1:

输入:ops = ["5","2","C","D","+"]
输出:30
解释:
"5" - 记录加 5 ,记录现在是 [5]
"2" - 记录加 2 ,记录现在是 [5, 2]
"C" - 使前一次得分的记录无效并将其移除,记录现在是 [5].
"D" - 记录加 2 * 5 = 10 ,记录现在是 [5, 10].
"+" - 记录加 5 + 10 = 15 ,记录现在是 [5, 10, 15].
所有得分的总和 5 + 10 + 15 = 30
复制代码

Пример 2:

输入:ops = ["5","-2","4","C","D","9","+","+"]
输出:27
解释:
"5" - 记录加 5 ,记录现在是 [5]
"-2" - 记录加 -2 ,记录现在是 [5, -2]
"4" - 记录加 4 ,记录现在是 [5, -2, 4]
"C" - 使前一次得分的记录无效并将其移除,记录现在是 [5, -2]
"D" - 记录加 2 * -2 = -4 ,记录现在是 [5, -2, -4]
"9" - 记录加 9 ,记录现在是 [5, -2, -4, 9]
"+" - 记录加 -4 + 9 = 5 ,记录现在是 [5, -2, -4, 9, 5]
"+" - 记录加 9 + 5 = 14 ,记录现在是 [5, -2, -4, 9, 5, 14]
所有得分的总和 5 + -2 + -4 + 9 + 5 + 14 = 27
复制代码

Пример 3:

输入:ops = ["1"]
输出:1
复制代码

 

намекать:

  • 1 <= операционная длина <= 1000
  • ops[i] — это «C», «D», «+» или строка, представляющая целое число. Целочисленный диапазон: [-3*104, 3*104]
  • Для операции «+» данные элемента гарантируют, что при записи этой операции всегда есть две действительные оценки.
  • Для действий "C" и "D" данные элемента гарантируют, что действительная оценка всегда присутствует, прежде чем это действие будет записано.

отвечать

простое моделирование

Для простого вопроса моделирования, поскольку вопрос указывает на то, что несколько специальных операций не будут недействительными, даже оценка некоторых граничных условий опущена, и непосредственно в соответствии с требованиями вопроса напишите 4 ветви, соответствующие 4 различным входам. различная обработка

  1. Если ввод представляет собой знак «+», добавьте первые две цифры в качестве значения этой цифры и поместите его в массив.Для первых двух цифр длина текущего массива ответов может быть получена в каждом цикле, так что можно получить первые две цифры позиции.

  2. Если введено значение «C», выталкивается последний элемент массива.

  3. Если ввод «D», получить предыдущий элемент через n и удвоить его как значение этого элемента и поместить его в массив

  4. Остальные случаи — это все числа, вставьте их прямо в массив и обратите внимание, что все числа, указанные в заголовке, являются строками, поэтому требуется преобразование.

  5. Последним шагом является добавление всех значений массива ответов.Здесь используется метод сокращения массива.Подробности см. в MDN.

Массив.прототип.уменьшить()

/**
 * @param {string[]} ops
 * @return {number}
 */
var calPoints = function (ops) {
  let res = [];
  ops.forEach((e, i) => {
    let n = res.length;
    if (e == "+") {
      res.push(res[n - 1] + res[n - 2]);
    } else if (e == "C") {
      res.pop();
    } else if (e == "D") {
      res.push(res[n - 1] * 2);
    } else {
      res.push(parseInt(e));
    }
  });
  return res.reduce((a, b) => a + b);
};
复制代码

изображение.png

рекомендация

отjuejin.im/post/7079266581926117389