螺旋矩阵
给定一个包含 m x n 个要素的矩阵,(m 行, n 列),按照螺旋顺序,返回该矩阵中的所有要素。
给定如下矩阵:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
应返回 [1,2,3,6,9,8,7,4,5]
。
做题思路:
1、这道题在程序员面试宝典上有,主要思路就是一圈一圈的来遍历,题目中的矩阵,分成两圈,从1,2,3,6,9,8,7,4是一个圈,内部的5是一个圈;
2、对每一圈的数据,分成四块来遍历,第一块是从1到3,第二块是从6到9,第三块是从8到7,第四块是4,按照这个步骤可以遍历矩阵中的所有数据。
具体的c++代码如下所示:
class Solution {
public:
/*
* @param matrix: a matrix of m x n elements
* @return: an integer list
*/
vector<int> spiralOrder(vector<vector<int>> matrix) {
// write your code here
int m=matrix.size();
vector<int> res;
if(m==0)
{
return res;
}
int n=matrix[0].size();
if(n==0)
{
return res;
}
int c=m>n?(n+1)/2:(m+1)/2;//c代表环数
int p=m,q=n;//当前环的长和宽
int i,j,k;
for(i=0;i<c;i++,p-=2,q-=2)
{
for(j=i;j<i+q;j++)
{
res.push_back(matrix[i][j]);
}
for(k=i+1;k<i+p;k++)
{
res.push_back(matrix[k][i+q-1]);
}
if(p==1||q==1)
{
break;
}
for(j=i+q-2;j>=i;j--)
{
res.push_back(matrix[i+p-1][j]);
}
for(k=i+p-2;k>i;k--)
{
res.push_back(matrix[k][i]);
}
}
return res;
}
};