2326. Matrice spirale IV
Difficulté :Moyen
Sujets : Tableau, liste chaînée, matrice, simulation
On vous donne deux entiers m et n, qui représentent les dimensions d'une matrice.
Vous recevez également la tête d'une liste chaînée d'entiers.
Générer une matrice m x n qui contient les entiers de la liste chaînée présentée dans l'ordre spirale (dans le sens des aiguilles d'une montre), en partant du haut gauche de la matrice . S'il reste des espaces vides, remplissez-les avec -1.
Renvoyer la matrice générée.
Exemple 1 :
Exemple 2 :
Exemple 3 :
Contraintes :
Indice :
Solution :
Nous allons simuler un parcours en spirale d'une matrice m x n, en la remplissant avec les valeurs d'une liste chaînée. Les positions restantes qui n'ont pas de valeurs de liste chaînées correspondantes seront remplies avec -1.
Voici comment la solution est structurée :
Implémentons cette solution en PHP : 2326. Matrice spirale IV
val = $val; $this->next = $next; } } /** * @param Integer $m * @param Integer $n * @param ListNode $head * @return Integer[][] */ function spiralMatrix($m, $n, $head) { ... ... ... /** * go to ./solution.php */ } // Helper function to print the matrix (for debugging) function printMatrix($matrix) { foreach ($matrix as $row) { echo implode(" ", $row) . "\n"; } } // Example usage: // Create the linked list: [3,0,2,6,8,1,7,9,4,2,5,5,0] $head = new ListNode(3); $head->next = new ListNode(0); $head->next->next = new ListNode(2); $head->next->next->next = new ListNode(6); $head->next->next->next->next = new ListNode(8); $head->next->next->next->next->next = new ListNode(1); $head->next->next->next->next->next->next = new ListNode(7); $head->next->next->next->next->next->next->next = new ListNode(9); $head->next->next->next->next->next->next->next->next = new ListNode(4); $head->next->next->next->next->next->next->next->next->next = new ListNode(2); $head->next->next->next->next->next->next->next->next->next->next = new ListNode(5); $head->next->next->next->next->next->next->next->next->next->next->next = new ListNode(5); $head->next->next->next->next->next->next->next->next->next->next->next->next = new ListNode(0); $m = 3; $n = 5; $matrix = spiralMatrix($m, $n, $head); printMatrix($matrix); ?>Explication:
Initialisation de la matrice : La matrice est initialisée avec -1 afin que tous les espaces non remplis restent -1 par défaut.
Mouvement en spirale :
- Le vecteur de direction dirs gère le mouvement dans quatre directions : droite, bas, gauche et haut.
- L'index dirIndex garde une trace de la direction actuelle. Après avoir parcouru une direction, nous calculons la position suivante et vérifions si elle est valide. Sinon, on change de direction.
Parcours de liste liée :
- Nous parcourons les nœuds de la liste chaînée, en plaçant les valeurs dans la matrice une par une, en suivant l'ordre en spirale.
Changement de limite et de direction :
- Lorsque nous rencontrons une position invalide (hors limites ou déjà remplie), nous faisons pivoter la direction de 90 degrés (c'est-à-dire changeons le vecteur de direction).
Complexité temporelle :
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!