
Desicription
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
|
[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ]
|
You should return [1,2,3,6,9,8,7,4,5].
Solution
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
class { private: int n, m; bool isValid(vector<vector<int> >& matrix, int x, int y){ if(x < 0 || x >= n || y < 0 || y >= m || matrix[x][y] == INT_MIN) return 0; return 1; } public: vector<int> spiralOrder(vector<vector<int> >& matrix) { vector<int> res; if(matrix.empty()) return res; n = matrix.size(); m = matrix[0].size(); int x = 0; int y = 0; while(1){ bool flag = 0; while(isValid(matrix, x, y)) res.push_back(matrix[x][y]), matrix[x][y] = INT_MIN, y++, flag = 1; y--; x++; while(isValid(matrix, x, y)) res.push_back(matrix[x][y]), matrix[x][y] = INT_MIN, x++, flag = 1; x--; y--; while(isValid(matrix, x, y)) res.push_back(matrix[x][y]), matrix[x][y] = INT_MIN, y--, flag = 1; y++; x--; while(isValid(matrix, x, y)) res.push_back(matrix[x][y]), matrix[x][y] = INT_MIN, x--, flag = 1; x++; y++; if(!flag) return res; } } };
|
近期评论