Сегодня мой 56-й день кодинга. Я решил один вопрос по матрице (массив 2d)
Проблема: Спиральный обход матрицы
Дана матрица размера r*c. Пройдите матрицу по спирали.
Пример 1:
Input: r = 4, c = 4 matrix[][] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15,16}} Output: 1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10 Explanation:
Пример 2:
Input: r = 3, c = 4 matrix[][] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}} Output: 1 2 3 4 8 12 11 10 9 5 6 7 Explanation: Applying same technique as shown above, output for the 2nd testcase will be 1 2 3 4 8 12 11 10 9 5 6 7.
Ваша задача
Вам не нужно ничего читать или печатать. Завершите функцию spirallyTraverse(), которая принимает matrix, r и c в качестве входных параметров и возвращает список целых чисел. обозначающий спиральный обход матрицы.
Ожидаемая временная сложность: O(r*c)
Ожидаемое вспомогательное пространство: O(r*c), только для возврата ответа.
Решение (в Java):
class Solution { //Function to return a list of integers denoting spiral traversal of matrix. static ArrayList<Integer> spirallyTraverse(int matrix[][], int r, int c) { ArrayList<Integer> a= new ArrayList<>(); int i, k=0, l=0; while(k<r && l<c){ for( i=l ; i<c; ++i) a.add(matrix[k][i]); k++; for(i=k; i<r; ++i) a.add(matrix[i][c-1]); c--; if(k<r){ for(i=c-1; i>=l; --i) a.add(matrix[r-1][i]); r--; } if(l<c){ for(i=r-1; i>=k; --i) a.add(matrix[i][l]); l++; } } return a; } }