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]
.
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int> ans;
if (!matrix.size()) return ans;
int height = matrix.size();
int len = matrix[0].size();
int total = height* len;
int num = 0;
int left, right, top, buttom;
left = 0;
top = 0; //第 0 行
buttom = height;
right = len;
while (num < total)
{
for (int i = left; i < right; ++i)
{
num++;
ans.push_back(matrix[top][i]);
if (num == total) return ans;
}
top++;
for (int j = top; j < buttom; j++)
{
num++;
ans.push_back(matrix[j][right - 1]);
if (num == total) return ans;
}
right--;
for (int i = right - 1; i >= left; i--)
{
num++;
ans.push_back(matrix[buttom - 1][i]);
if (num == total) return ans;
}
buttom--;
for (int j = buttom - 1; j >= top; j--)
{
num++;
ans.push_back(matrix[j][left]);
if (num == total) return ans;
}
left++;
}
return ans;
}
};
int main()
{
vector<vector<int >> matrix = { {2,3} };
Solution a;
vector<int> ans = a.spiralOrder(matrix);
for (int i = 0; i < ans.size(); ++i)
cout << ans[i] << " ";
system("pause");
return 0;
}