题解 | #螺旋矩阵#
螺旋矩阵
http://www.nowcoder.com/practice/7edf70f2d29c4b599693dc3aaeea1d31
定义上下左右四个边界即可,注意条件有row和col等于0的情况,需要特判
public:
vector<int> spiralOrder(vector<vector<int> > &matrix) {
vector<int> ans;
int col=matrix.size();
int row=matrix[0].size();
if(col==0 || row==0)
return {};
//定义上下左右四个边界
int u=0;
int d=col-1;
int l=0;
int r=row-1;
while(true)
{
//顺序一定是右下左上
//向右边
for(int i=l; i<=r; i++)
ans.push_back(matrix[u][i]);
//重新定义上边界
if(++u>d) break;
//向下
for(int i=u; i<=d; i++)
ans.push_back(matrix[i][r]);
//定义右边界
if(--r<l) break;
for(int i=r; i>=l; i--)
ans.push_back(matrix[d][i]);;
if(--d<u) break;
for(int i=d; i>=u; i--)
ans.push_back(matrix[i][l]);
if(++l>r) break;
}
return ans;
}
};