Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.
For example,
Given the following matrix:
[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ]
You should return [1,2,3,6,9,8,7,4,5].
这道题,我们可以使用递归的方法来解决,分别定义四个函数right,down,left,up。
用一个二维vector<vector<bool>>来记录是否已经读取过这个数字了。
具体代码如下
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int>fuck;
if(matrix.empty())return fuck;
vector<vector<bool>>shit(matrix.size(), vector<bool>(matrix[0].size(), true));
int m = (int)matrix[0].size();
int n = (int)matrix.size();
if(m==1)
{
for(int i=0;i<n;i++)fuck.push_back(matrix[i][0]);
return fuck;
}
if(n==1)
{
for(auto a:matrix[0])fuck.push_back(a);
return fuck;
}
int bitch = 0;
right(bitch, fuck, matrix, m, n,shit);
return fuck;
}
void right(int bitch, vector<int> &fuck, vector<vector<int>>matrix, int m, int n, vector<vector<bool>>shit)
{
for (int i = bitch; i < m - bitch; i++)
{
fuck.push_back(matrix[bitch][i]);
shit[bitch][i] = false;
}
if (shit[bitch+1][m - bitch-1])
{
bitch++;
down(bitch, fuck, matrix, m, n, shit);
}
}
void down(int bitch, vector<int>&fuck, vector<vector<int>>matrix, int m, int n, vector<vector<bool>>shit)
{
for (int i = bitch; i < n - bitch+1 ; i++)
{
fuck.push_back(matrix[i][m - bitch]);
shit[i][m - bitch] = false;
}
if (shit[n - bitch][m - bitch-1])
{
left(bitch, fuck, matrix, m, n, shit);
}
}
void left(int bitch, vector<int>&fuck, vector<vector<int>>matrix, int m, int n, vector<vector<bool>>shit)
{
for (int i = m - bitch - 1; i >= bitch - 1; i--)
{
fuck.push_back(matrix[n - bitch][i]);
shit[n - bitch][i] = false;
}
if (shit[n - bitch - 1][bitch - 1])
{
up(bitch, fuck, matrix, m, n, shit);
}
}
void up(int bitch, vector<int>&fuck, vector<vector<int>>matrix, int m, int n, vector<vector<bool>>shit)
{
for (int i = n - 1 - bitch; i >= bitch; i--)
{
fuck.push_back(matrix[i][bitch - 1]);
shit[i][bitch - 1] = false;
}
if (shit[bitch][bitch])
{
right(bitch, fuck, matrix, m, n, shit);
}
}
};
请别太在意代码里面的fuck,shit以及bitch,毕竟他们是万能的~
本文介绍了一种矩阵螺旋遍历的算法实现,通过定义四个方向的递归函数完成遍历,并利用二维布尔数组记录已访问元素,适用于m×n大小的矩阵。
485

被折叠的 条评论
为什么被折叠?



