LeetCode: Spiral Matrix
Title:
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]
.
思路,其实就是模拟,之前自己写了很久,而且考虑了很多,根本就没有人家几句就写好了。。。
class Solution { public: vector<int> spiralOrder(vector<vector<int> > &matrix) { // Start typing your C/C++ solution below // DO NOT write int main() function if(matrix.size() == 0) return vector<int>(); int x1 = 0; int y1 = 0; int x2 = matrix.size()-1; int y2 = matrix[0].size()-1; vector<int> ans; while(x1 <= x2 && y1 <= y2) { //up row for(int i = y1; i <= y2; ++i) ans.push_back(matrix[x1][i]); //right column for(int i = x1+1; i <= x2; ++i) ans.push_back(matrix[i][y2]); //bottom row 用来防止只剩下一行 if(x2 != x1) for(int i = y2-1; i >= y1; --i) ans.push_back(matrix[x2][i]); //left column 用来防止只剩下一列 if(y1 != y2) for(int i = x2-1; i > x1; --i) ans.push_back(matrix[i][y1]); x1++, y1++, x2--, y2--; } return ans; } };
Title Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.
For example,
Given n = 3
,
You should return the following matrix:
[ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]
class Solution{ public: vector<vector<int> > generateMatrix(int n){ vector<vector<int> > result; if (0 == n){ return result; } for (int i = 0 ; i < n; i++){ vector<int> v(n); result.push_back(v); } int x1 = 0, x2 = n-1,y1 = 0,y2 = n-1; int count = 1; while (x1 <= x2 && y1 <= y2){ for (int i = y1; i <= y2; i++){ result[x1][i] = count++; } for (int i = x1+1; i <= x2; i++) result[i][y2] = count++; for (int i = y2-1; i >= y1; i--) result[x2][i] = count++; for (int i = x2-1; i >= x1+1; i--) result[i][y1] = count++; x1++;y1++;x2--;y2--; } return result; } };