record de test de brosse leetcode-682. Jeu de baseball

L'offre arrive, creusez des amis pour ramasser! Je participe à l'événement de vérification du recrutement du printemps 2022, cliquez pour voir les détails de l'événement .

avant-propos

Le sujet d'aujourd'hui est simple. Vous pouvez le simuler selon les exigences du sujet. C'est très simple. C'est comme écrire du code métier, et ce n'est pas du tout lié à l'algorithme.

Question du jour

Le sujet d'aujourd'hui est 682. Jeu de baseball , la difficulté est facile

  • Vous êtes maintenant le marqueur d'un match de baseball spécial. Le jeu se compose de plusieurs tours et les scores des tours précédents peuvent affecter les scores des tours suivants.

  • Lorsque le jeu a commencé, le record était vierge. Vous obtiendrez une liste de chaînes ops qui enregistre les opérations, où ops[i] est la ième opération que vous devez enregistrer, et ops suit ces règles :

  • Entier x - Indique le nouveau score x obtenu ce tour

  • "+" - signifie que le nouveau score obtenu ce tour est la somme des deux scores précédents. Les données de l'item garantissent qu'il y a toujours deux scores valides précédant cette action lors de son enregistrement.

  • "D" - Indique que le nouveau score pour ce tour est le double du score précédent. Les données de l'élément garantissent qu'un score valide est toujours présent avant que cette action ne soit enregistrée.

  • "C" - Indique que le score précédent était invalide et supprimé de l'enregistrement. Les données de l'élément garantissent qu'un score valide est toujours présent avant que cette action ne soit enregistrée.

  • Veuillez retourner la somme de tous les scores dans le dossier.

 

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

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

Exemple 3 :

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

 

indice:

  • 1 <= ops.longueur <= 1000
  • ops[i] est "C", "D", "+" ou une chaîne représentant un entier. La plage d'entiers est [-3*104, 3*104]
  • Pour l'opération "+", la donnée de l'item garantit qu'il y a toujours deux scores valides précédant cette opération lors de son enregistrement
  • Pour les actions "C" et "D", les données de l'item garantissent qu'un score valide est toujours présent avant que cette action ne soit enregistrée

répondre

simulation simple

Pour une question de simulation simple, puisque la question indique que plusieurs opérations spéciales ne seront pas invalides, même le jugement de certaines conditions aux limites est omis, et directement selon les exigences de la question, écrivez 4 branches, correspondant à 4 entrées différentes traitement différent

  1. Si l'entrée est un signe "+", ajoutez les deux premiers chiffres comme valeur de ce chiffre et poussez-le dans le tableau. Pour les deux premiers chiffres, la longueur du tableau de réponse actuel peut être obtenue dans chaque boucle, de sorte que les deux premiers chiffres peuvent être obtenus.

  2. Si l'entrée est 'C', le dernier élément du tableau est sauté

  3. Si l'entrée est 'D', récupérez l'élément précédent jusqu'à n et doublez-le comme valeur de cet élément et poussez-le dans le tableau

  4. Les autres cas sont tous des nombres, poussez directement dans le tableau et notez que les nombres donnés dans le titre sont tous des chaînes, donc une conversion est nécessaire.

  5. La dernière étape consiste à ajouter toutes les valeurs du tableau de réponse. La méthode reduce du tableau est utilisée ici. Pour plus de détails, veuillez vous référer à 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);
};
复制代码

image.png

Je suppose que tu aimes

Origine juejin.im/post/7079266581926117389
conseillé
Classement