Je me prépare pour une interview et je suis bloqué sur cette question depuis un certain temps maintenant. Quelqu'un pourrait-il m'aider s'il vous plaît avec le code. Si ce n'est pas complet alors peut-être un extrait de celui-ci? .. S'il vous plaîtTraverse 2D Array en spirale utilisant la récursivité
Répondre
Python 2, imprime une liste imbriquée 2D dans le sens horaire, à partir du coin en haut à gauche du centre:
>>> def clockwise(r):
... return list(r[0]) + clockwise(list(reversed(zip(*r[1:])))) if r else []
...
>>> a = [
... [ 1, 2, 3],
... [ 5, 6, 7],
... [ 9, 10, 11]]
>>> clockwise(a)
[1, 2, 3, 7, 11, 10, 9, 5, 6]
>>> a = [
... [ 1, 2, 3, 4],
... [ 5, 6, 7, 8],
... [ 9, 10, 11, 12],
... [13, 14, 15, 16]]
>>> clockwise(a)
[1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10]
Alors qu'est-ce qui se passe ici? L'argument à clockwise
est un tableau à deux dimensions r
. Nous voulons imprimer son contenu de gauche à droite, dans le sens des aiguilles d'une montre. Donc, si le tableau à deux dimensions n'est pas vide, alors nous pouvons imprimer son premier élément, qui est la ligne du haut. Ensuite, nous voulons imprimer les derniers éléments des lignes restantes (les chiffres sur la droite). Nous ne voulons pas nous répéter. Donc ce que nous faisons, c'est de transformer les lignes restantes de sorte que les prochains numéros à imprimer soient sur la rangée supérieure. Nous faisons cela en transposant les lignes restantes (de sorte qu'elles deviennent des colonnes), puis en les inversant.
Peut-être que l'algorithme devient plus clair si je l'écris dans Haskell:
import Data.List
clockwise :: [[a]] -> [a]
clockwise (x:xs) = x ++ (clockwise $ reverse $ transpose $ xs)
clockwise _ = []
+1, belle réponse – ChristopheD
belle réponse à coup sûr! Mais je suis plus intéressé par l'approche et l'algorithme utilisés. S'il vous plaît aider. –
Je vais l'expliquer en une seconde :) – Stephan202