241. Différentes façons d'ajouter des parenthèses
Difficulté :Moyen
Sujets : Mathématiques, Chaînes, Programmation Dynamique, Récursion, Mémorisation
Étant donné une expression de chaîne de nombres et d'opérateurs, renvoie tous les résultats possibles du calcul de toutes les différentes manières possibles de regrouper les nombres et les opérateurs. Vous pouvez renvoyer la réponse dans n'importe quel ordre.
Les cas de test sont générés de telle sorte que les valeurs de sortie tiennent dans un entier de 32 bits et que le nombre de résultats différents ne dépasse pas 104.
Exemple 1 :
((2-1)-1) = 0 (2-(1-1)) = 2
Exemple 2 :
(2*(3-(4*5))) = -34 ((2*3)-(4*5)) = -14 ((2*(3-4))*5) = -10 (2*((3-4)*5)) = -10 (((2*3)-4)*5) = 10
Contraintes :
Solution :
Nous pouvons utiliser la récursion combinée à la mémoisation pour stocker les résultats précédemment calculés pour les sous-expressions, car cela évite les calculs redondants et optimise la solution.
Récursion :
Mémoisation :
Cas de base :
Pour la saisie "2*3-4*5" :
Implémentons cette solution en PHP : 241. Différentes façons d'ajouter des parenthèses
<?php class Solution { /** * @var array */ private $memo = []; /** * @param String $expression * @return Integer[] */ public function diffWaysToCompute($expression) { ... ... ... /** * go to ./solution.php */ } /** * @param $expression * @return array|mixed */ private function compute($expression) { ... ... ... /** * go to ./solution.php */ } } // Example usage $solution = new Solution(); $expression1 = "2-1-1"; $expression2 = "2*3-4*5"; print_r($solution->diffWaysToCompute($expression1)); // Output: [0, 2] print_r($solution->diffWaysToCompute($expression2)); // Output: [-34, -14, -10, -10, 10] ?>
Cette approche garantit que vous calculez efficacement tous les résultats possibles en tirant parti de la mémorisation pour éviter les calculs redondants.
Liens de contact
Si vous avez trouvé cette série utile, pensez à donner une étoile au référentiel sur GitHub ou à partager la publication sur vos réseaux sociaux préférés ?. Votre soutien signifierait beaucoup pour moi !
Si vous souhaitez du contenu plus utile comme celui-ci, n'hésitez pas à me suivre :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!