Сложность: medium
Для матрицы размером m на n верните все элементы матрицы в спиральном порядке.
Пример:
Input: matrix = [[1,2,3],[4,5,6],[7,8,9]]
Output: [1,2,3,6,9,8,7,4,5]
👨💻 Алгоритм:
1⃣Инициализируемая граница: up, down, left, right, а также список resultдля сохранения результата.
2⃣Пока размер результата уменьшает общее количество элементов: продвигается по верхней строке влево вправо, вправо столбцу вверху вниз, нижней строке справа налево (если строки не поворачиваются), левый столбец увеличивается вверх (если столбцы не поворачиваются).
3⃣После каждого прохождения обновляем границу: смещаемся вверх, вниз, влево и вправо вправо.
😎 Решение:
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> result = new ArrayList<>();
int rows = matrix.length;
int columns = matrix[0].length;
int up = 0;
int left = 0;
int right = columns - 1;
int down = rows - 1;
while (result.size() < rows * columns) {
for (int col = left; col <= right; col++) {
result.add(matrix[up][col]);
}
for (int row = up + 1; row <= down; row++) {
result.add(matrix[row][right]);
}
if (up != down) {
for (int col = right - 1; col >= left; col--) {
result.add(matrix[down][col]);
}
}
if (left != right) {
for (int row = down - 1; row > up; row--) {
result.add(matrix[row][left]);
}
}
left++;
right--;
up++;
down--;
}
return result;
}
}Ставь 👍 и забирай 📚 Базу знаний
