Пусть n
будет количеством строк (или столбцов), тогда количество диагоналей будет 2*n-1
Для первого символа каждой строки мы go вниз по первому столбцу один раз мы достигаем нижнего левого угла, мы начинаем перемещаться по нижнему ряду
При добавлении символов в строки для каждого [row][column]
, на котором мы находимся, следующий, который нам нужен go, будет в [row-1][column+1]
Вот пример кода java, который добавляет диагонали в виде строки в массив, а затем выводит массив на стандартный вывод
public static void main(String[] args){
int n = 4; // number of rows
String array[] = new String[2*n-1]; // array to hold the diagonals
int arrayIndex = 0;
for (int i = 0; i < 2*n-1; i++) {
if (i < n) { // until we reach the bottom left corner
int row = i; // for each row
int column = 0; // start from the left side
String tmp = "";
while (row >= 0)
tmp += m[row--][column++];
array[arrayIndex++] = tmp;
}
else { // after we've reached the bottom left corner
int row = n-1; // start from the bottom row
int column = i-n+1; // for each column
String tmp = "";
while (column < n)
tmp += m[row--][column++];
array[arrayIndex++] = tmp;
}
}
// prints out the array
for (String s : array)
System.out.print(s + " ");
System.out.print("\n");
}
static String m[][] = {
{"a", "b", "c", "d"},
{"e", "f", "g", "h"},
{"i", "j", "k", "l"},
{"m", "n", "o", "p"}
};
Вот как выглядит стандартный вывод
a eb ifc mjgd nkh ol p
Надеюсь, это поможет :)