Ваш код работает правильно для квадратных матриц, но не для прямоугольных. Ошибка возникает из-за того, что в вашем коде не учитывается случай, когда количество строк и столбцов матрицы не равны. В этом случае, последний внутренний цикл for может добавить лишние элементы в результат.
Чтобы исправить эту ошибку, вы можете добавить проверку перед последним внутренним циклом for, чтобы убедиться, что текущий ряд не был уже добавлен в результат. Например:
for (int i = 0; i <= matrix.length / 2; i++) {
int j;
for (j = i; j < matrix[0].length - i; j++)
result.add(matrix[i][j]);
for (j = i + 1; j < matrix.length - i; j++)
result.add(matrix[j][matrix[0].length - i - 1]);
for (j = matrix[0].length - i - 2; j >= i && matrix.length - i - 1 != i; j--)
result.add(matrix[matrix.length - i - 1][j]);
for (j = matrix.length - i - 2; j > i && matrix[0].length - i - 1 != i; j--)
result.add(matrix[j][i]);
}
В этом исправленном коде добавлена проверка matrix.length - i - 1 != i перед третьим внутренним циклом for и проверка matrix[0].length - i - 1 != i перед четвертым внутренним циклом for. Эти проверки гарантируют, что текущий ряд или столбец не были уже добавлены в результат.
Given an m x n matrix, return all elements of the matrix in spiral order.
Пример:
Вход: matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
Выход: [1,2,3,4,8,12,11,10,9,5,6,7]Мой код прошёл первый тест, где была дана матрица n * n, но на этом примере моя программа выводит лишнюю шестёрку в конце: [1,2,3,4,8,12,11,10,9,5,6,7,6]