
题目链接
Description
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.
Example 1:
Input:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
Output: [1,2,3,6,9,8,7,4,5]
解题思路
只想到了比较直接的方法,一层层遍历。没层对四条边分别做处理。需要讨论矩阵行和列的大小。
示例代码
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int> nums;
int n = matrix.size()-1;
int m = matrix[0].size()-1;
int index = 0;
int cn = min(matrix.size()/2, matrix[0].size() / 2 );
for (int i = 0; i < cn; i++)
{
for (int k = index; k <= m - index; k++)
nums.push_back(matrix[i][k]);
for (int k = index+1; k <= n - index; k++)
nums.push_back(matrix[k][m - i]);
for (int k = m - index-1; k >= index; k--)
nums.push_back(matrix[n - i][k]);
for (int k = n - index-1; k >= index + 1; k--)
nums.push_back(matrix[k][i]);
index++;
}
if (matrix.size() < matrix[0].size())
{
if (matrix.size() % 2 == 1)
{
int i = cn;
for (int k = index; k <= m - index; k++)
nums.push_back(matrix[i][k]);
}
}
else
{
if (matrix[0].size() % 2 == 1)
{
int i = cn;
for (int k = index; k <= n - index; k++)
nums.push_back(matrix[k][i]);
}
}
for (int i = 0; i < nums.size(); i++)
cout << nums[i] << " ";
return nums;
}




近期评论