Spiral Matrix
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:
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]
.class Solution {//two ways. auxillary road map //or compute the iteration loop public: vector<int> spiralOrder(vector<vector<int> > &matrix) { // Start typing your C/C++ solution below // DO NOT write int main() function vector<int> r;//result if (matrix.empty() || matrix[0].empty()) return r; int const m_max = matrix.size();//rows int const n_max = matrix[0].size();//cols int dec = 0;//decrement count int row = 0;//start row int col = 0;//start col int lastIndex = 0; while(1){ lastIndex = n_max-1 -dec + col; for(int ii = col; ii <= lastIndex; ++ii){//left to right r.push_back(matrix[row][ii]); } col = lastIndex; ++row; ++dec; if (dec >= m_max) return r; lastIndex = m_max-1 -dec + row; for(int ii = row; ii <= lastIndex; ++ii){//up to down r.push_back(matrix[ii][col]); } row = lastIndex; --col; if (dec >= n_max) return r; lastIndex = col - (n_max-1-dec); for(int ii = col; ii >= lastIndex; --ii){//right to left r.push_back(matrix[row][ii]); } col = lastIndex; --row; ++dec; if (dec >= m_max) return r; lastIndex = dec + row + 1 - m_max; for(int ii = row; ii >= lastIndex; --ii){//down to up r.push_back(matrix[ii][col]); } row = lastIndex; ++col; if (dec >= n_max) return r; } return r; } };
No comments:
Post a Comment