Given an m x nmatrix, return all elements of thematrixin spiral order.
Example 1:
Input: matrix = [[1,2,3],[4,5,6],[7,8,9]]
Output: [1,2,3,6,9,8,7,4,5]
Example 2:
Input: matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
Output: [1,2,3,4,8,12,11,10,9,5,6,7]
Solution:
Using 4 pointer top, down, left, right
And a direction pointer
classSolution{public:vector<int> spiralOrder(vector<vector<int>> &matrix) { vector<int> res;int n =matrix.size();int m =matrix[0].size();int top =0;int down = n -1;int left =0;int right = m -1;int dir =0;while (top <= down && left <= right) {if (dir ==0) {for (int i = left; i <= right; i++) {res.push_back(matrix[top][i]); } top++; }elseif (dir ==1) {for (int i = top; i <= down; i++) {res.push_back(matrix[i][right]); } right--; }elseif (dir ==2) {for (int i = right; i >= left; i--) {res.push_back(matrix[down][i]); } down--; }elseif (dir ==3) {for (int i = down; i >= top; i--) {res.push_back(matrix[i][left]); } left++; } dir = (dir +1) %4; }return res; }};