💡Задача: "Матрица спирали"
https://t.me/csharp_ci
Условие задачи: дан двумерный массив, надо вернуть все его элементы в "спиральном" порядке по часовой стрелке.
Пример:
Ввод: matrix = [[1,2,3],[4,5,6],[7,8,9]]
Вывод: [1,2,3,6,9,8,7,4,5]
Ввод: 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]
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int> jat;
int n=matrix.size(),m=matrix[0].size();
int up=0,left=0,right=m-1,down=n-1;
while(jat.size()<m*n)
{
for(int i=left;i<=right&&jat.size()<m*n;i++) jat.push_back(matrix[up][i]);
for(int i=up+1;i<=down-1&&jat.size()<m*n;i++) jat.push_back(matrix[i][right]);
for(int i=right;i>=left&&jat.size()<m*n;i--) jat.push_back(matrix[down][i]);
for(int i=down-1;i>=up+1&&jat.size()<m*n;i--) jat.push_back(matrix[i][left]);
left++;
right--;
up++;
down--;
}return jat;
}
};
Временная сложность: O(n^2)
Пространственная сложность: O(n)