Ein Array diagonal durchlaufen

8

Ich habe ein großes Array beliebiger Größe. Es ist eine quadratische Anordnung. Ich versuche zu verstehen, wie ich es diagonal durchqueren kann wie ein / und nicht ein \ (was ich bereits weiß). Ich habe den folgenden Code bis jetzt:

%Vor%

Ich habe drei Loops, weil ich so die andere Diagonale gemacht habe:

%Vor%

Bei meinen Versuchen gehe ich weiter über die Grenzen hinaus und erhalte eine ElementOutOfBounds-Ausnahme. Angenommen, das Array ist wie folgt (3x3 statt 500x500):

%Vor%

Ich möchte Folgendes als Zeichenfolgen ausgeben:

%Vor%

Eine vorherige SO-Frage hatte ein ähnliches Problem mit Integer-Arrays, und die Lösung basiert auf der Summe der Array-Elemente. Aber ich arbeite mit Zeichen, also kann ich mir keine Methode ausdenken.

    
gator 25.01.2014, 03:45
quelle

2 Antworten

11

Denken Sie über die Koordinaten der Zellen nach:

%Vor%

Für jede Diagonale haben alle Elemente etwas gemeinsam: Die Summe der Koordinaten eines Elements ist eine Konstante. Hier sind die Konstanten:

%Vor%

Die minimale Konstante ist die kleinste Koordinatensumme, 0. Die maximale Konstante ist die größte Koordinatensumme. Da jede Koordinatenkomponente bis zu array.length - 1 gehen kann, ist die maximale Konstante 2 * (array.length - 1) .

Die Sache ist also, über die Konstanten zu iterieren. Durchlaufen Sie für jede Konstante die Elemente, deren Koordinaten sich zur Konstante addieren. Dies ist wahrscheinlich der einfachste Ansatz:

%Vor%

Dies führt jedoch dazu, dass über viele außerhalb liegende Koordinaten iteriert wird, da es immer über alle möglichen y -Koordinaten iteriert, obwohl nur eine Diagonale alle möglichen y -Koordinaten enthält. Ändern wir die y -Schleife so, dass sie nur die y -Koordinaten aufruft, die für die aktuelle k benötigt werden.

Eine Bedingung für Koordinaten außerhalb der Grenzen ist x < 0 . Ersetzen Sie die Definition von x und lösen Sie:

%Vor%

Wenn y > k , x also negativ ist. Daher wollen wir nur eine Schleife machen, solange y <= k .

Die andere Bedingung für Koordinaten außerhalb der Grenzen ist x >= array.length . Lösen:

%Vor%

Wenn y <= k - array.length , x also zu groß ist. Daher möchten wir y bei 0 oder k - array.length + 1 starten, je nachdem, welcher Wert größer ist.

%Vor%

Hinweis: Ich habe nur diesen Code als korrekt bewiesen. Ich habe es nicht getestet.

    
rob mayoff 25.01.2014, 04:04
quelle
0

Viel einfacher ist es, die Summe zu überprüfen, wenn die Indizes gleich dem Array sind. length = 1; für diagonalRight und für diagonalLeft überprüfe einfach, ob i gleich j ist

Beispiel:

digonalLeft Summen \ der Matrix, weil (0,0) (1,1) (2,2) die Diagonale bildet. diagonalRight summiert / von Matrix, weil (0 + 2) = (1 + 1) = (2 + 0) = 2 und 2 ist die array.length - 1.

%Vor%     
user1863196 15.08.2017 02:24
quelle

Tags und Links