首页 > 代码库 > Spiral Matrix
Spiral Matrix
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]
.
struct Direction
{
int x;
int y;
Direction()
{}
Direction(int x,int y)
{
this->x=x;
this->y=y;
}
};
class Solution {
public:
vector<int> spiralOrder(vector<vector<int> > &matrix)
{
vector<int> result;
//find max
int m=matrix.size();
if(m==0) return result;
int n=matrix[0].size();
int FLAG=matrix[0][0];
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
if(matrix[i][j]>FLAG)
FLAG=matrix[i][j];
FLAG++;
struct Direction dir[4];
dir[0].x=0;dir[0].y=1;
dir[1].x=1;dir[1].y=0;
dir[2].x=0;dir[2].y=-1;
dir[3].x=-1;dir[3].y=0;
int cnt=0;
int x=0;
int y=-1;
int diri=0;
while(cnt<m*n)
{
while(x+dir[diri].x>=0 && x+dir[diri].x<m && y+dir[diri].y>=0 && y+dir[diri].y<n
&& matrix[x+dir[diri].x][y+dir[diri].y]!=FLAG)
{
x=x+dir[diri].x;
y=y+dir[diri].y;
result.push_back(matrix[x][y]);
matrix[x][y]=FLAG;
cnt++;
}
diri=(diri+1)%4;
}
return result;
}
};
{
int x;
int y;
Direction()
{}
Direction(int x,int y)
{
this->x=x;
this->y=y;
}
};
class Solution {
public:
vector<int> spiralOrder(vector<vector<int> > &matrix)
{
vector<int> result;
//find max
int m=matrix.size();
if(m==0) return result;
int n=matrix[0].size();
int FLAG=matrix[0][0];
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
if(matrix[i][j]>FLAG)
FLAG=matrix[i][j];
FLAG++;
struct Direction dir[4];
dir[0].x=0;dir[0].y=1;
dir[1].x=1;dir[1].y=0;
dir[2].x=0;dir[2].y=-1;
dir[3].x=-1;dir[3].y=0;
int cnt=0;
int x=0;
int y=-1;
int diri=0;
while(cnt<m*n)
{
while(x+dir[diri].x>=0 && x+dir[diri].x<m && y+dir[diri].y>=0 && y+dir[diri].y<n
&& matrix[x+dir[diri].x][y+dir[diri].y]!=FLAG)
{
x=x+dir[diri].x;
y=y+dir[diri].y;
result.push_back(matrix[x][y]);
matrix[x][y]=FLAG;
cnt++;
}
diri=(diri+1)%4;
}
return result;
}
};
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。