给定一个包含 m x n 个要素的矩阵,(m 行, n 列),按照螺旋顺序,返回该矩阵中的所有要素。
样例
给定如下矩阵:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
应返回 [1,2,3,6,9,8,7,4,5]
。
有趣的新解法思路:由当前坐标通过简单的逻辑分析可得下一个坐标
class Solution {
public:
/**
* @param matrix a matrix of m x n elements
* @return an integer array
*/
vector<int> spiralOrder(vector<vector<int>>& matrix) {
// Write your code here
vector<int> res;
if(matrix.size() == 0)
return res;
const int m = matrix.size();
const int n = matrix[0].size();
bool flag[m][n] ;
int coord[2] = {0};
int screw[m][n] ;
for(int i = 0; i <= m * n; i++)
{
flag[(i - 1) / n][(i - 1) % n] = 0;
}
for(int i = 1; i <= m * n; i++ )
{
res.push_back(matrix[coord[0]][coord[1]]);
//screw[coord[0]][coord[1]] = matrix[(i - 1) / 4][(i - 1) % 4] ;
//cout<<"("<<coord[0]<<","<<coord[1]<<")->"<<endl;
if( coord[1] + 1 < n && flag[coord[0]][coord[1] + 1] != 1)
{
if(coord[0] - 1 >= 0 && flag[coord[0] - 1][coord[1]] != 1)
{
flag[coord[0]][coord[1]] = 1;
coord[0]--;
}
else
{
flag[coord[0]][coord[1]] = 1;
coord[1]++;
}
}
else if(coord[0] + 1 < m && flag[coord[0] + 1][coord[1]] != 1)
{
flag[coord[0]][coord[1]] = 1;
coord[0]++;
}
else if( coord[1] - 1 >= 0 && flag[coord[0]][coord[1] - 1] != 1)
{
flag[coord[0]][coord[1]] = 1;
coord[1]--;
}
else if(coord[0] - 1 >= 0 && flag[coord[0] - 1][coord[1]] != 1)
{
flag[coord[0]][coord[1]] = 1;
coord[0]--;
}
else
flag[coord[0]][coord[1]] = 1;
}
return res;
}
};