leetcode brush test record-682 Juego de béisbol

Llega oferta, cava amigos a recoger! Estoy participando en el evento de registro de reclutamiento de primavera de 2022, haga clic para ver los detalles del evento .

prefacio

El tema de hoy es simple. Puede simularlo de acuerdo con los requisitos del tema. Es muy simple. Se siente como escribir un código comercial y no está vinculado al algoritmo en absoluto.

Pregunta del día

El tema de hoy es 682. Juego de beisbol , la dificultad es facil

  • Ahora eres el anotador de un juego especial de béisbol. El juego consta de varias rondas, y los puntajes de las rondas anteriores pueden afectar los puntajes de las rondas posteriores.

  • Cuando comenzó el juego, el registro estaba en blanco. Obtendrá una lista de cadenas ops que registra operaciones, donde ops[i] es la i-ésima operación que necesita registrar, y ops sigue estas reglas:

  • Entero x - Indica la nueva puntuación x obtenida en esta ronda

  • "+" - significa que la nueva puntuación obtenida en esta ronda es la suma de las dos puntuaciones anteriores. Los datos del ítem garantizan que siempre hay dos puntajes válidos que preceden a esta acción cuando se registra.

  • "D": indica que el nuevo puntaje para esta ronda es el doble del puntaje anterior. Los datos del elemento garantizan que siempre hay una puntuación válida antes de que se registre esta acción.

  • "C": indica que la puntuación anterior no era válida y se eliminó del registro. Los datos del elemento garantizan que siempre hay una puntuación válida antes de que se registre esta acción.

  • Por favor devuelva la suma de todos los puntajes en el registro.

 

Ejemplo 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
复制代码

Ejemplo 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
复制代码

Ejemplo 3:

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

 

insinuación:

  • 1 <= ops.longitud <= 1000
  • ops[i] es "C", "D", "+" o una cadena que representa un número entero. El rango de enteros es [-3*104, 3*104]
  • Para la operación "+", los datos del ítem garantizan que siempre hay dos puntajes válidos que preceden a esta operación cuando se registra
  • Para las acciones "C" y "D", los datos del elemento garantizan que siempre hay una puntuación válida antes de que se registre esta acción

responder

simulación sencilla

Para una pregunta de simulación simple, dado que la pregunta indica que varias operaciones especiales no serán inválidas, incluso se omite el juicio de algunas condiciones de contorno, y directamente de acuerdo con los requisitos de la pregunta, escriba 4 ramas, correspondientes a 4 entradas diferentes tratamiento diferente

  1. Si la entrada es un signo '+', agregue los primeros dos dígitos como el valor de este dígito e introdúzcalo en la matriz. Para los dos primeros dígitos, la longitud de la matriz de respuesta actual se puede obtener en cada bucle, de modo que se pueden obtener los dos primeros dígitos.

  2. Si la entrada es 'C', se extrae el último elemento de la matriz

  3. Si la entrada es 'D', obtenga el elemento anterior a través de n y duplíquelo como el valor de este elemento y empújelo a la matriz

  4. El resto de los casos son todos números, inserte directamente en la matriz y tenga en cuenta que los números dados en el título son todas cadenas, por lo que se requiere una conversión.

  5. El último paso es agregar todos los valores de la matriz de respuesta. Aquí se utiliza el método de reducción de la matriz. Para obtener más detalles, consulte MDN.

Array.prototype.reduce()

/**
 * @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);
};
复制代码

imagen.png

Supongo que te gusta

Origin juejin.im/post/7079266581926117389
Recomendado
Clasificación