Задача: 498. Diagonal Traverse
Дан массив m x n матрицы mat, верните массив всех элементов матрицы в диагональном порядке.
Пример:
Input: mat = [[1,2,3],[4,5,6],[7,8,9]]
Output: [1,2,4,7,5,3,6,8,9]
👨💻 Алгоритм:
1⃣Инициализация и подготовка
Проверьте, пуста ли матрица. Инициализируйте переменные для хранения размеров матрицы. Создайте массив result для хранения окончательных результатов и временный список intermediate для промежуточных значений диагоналей.
2⃣Итерация по диагоналям
Внешний цикл для прохождения по всем диагоналям. Головы диагоналей находятся в первой строке и последнем столбце. Внутренний цикл для итерации по элементам каждой диагонали. Индексы элементов диагонали изменяются до выхода за пределы матрицы.
3⃣Обработка диагоналей
Для каждой диагонали сохраните её элементы в списке intermediate. Переверните элементы диагонали, если её номер чётный. Добавьте элементы диагонали в массив result.
😎 Решение:
public class Solution {
public int[] FindDiagonalOrder(int[][] mat) {
if (mat == null || mat.Length == 0) return new int[0];
int N = mat.Length, M = mat[0].Length;
List<int> result = new List<int>();
for (int d = 0; d < N + M - 1; ++d) {
List<int> intermediate = new List<int>();
int r = d < M ? 0 : d - M + 1;
int c = d < M ? d : M - 1;
while (r < N && c >= 0) {
intermediate.Add(mat[r][c]);
r++;
c--;
}
if (d % 2 == 0) {
intermediate.Reverse();
}
result.AddRange(intermediate);
}
return result.ToArray();
}
}👉Новости 👉База вопросов
