模拟题目,使用额外的空间来记录是否遍历过,时间复杂度O(n^2)
const int dx[]={1,0,-1,0}; const int dy[]={0,1,0,-1}; class Solution { public: vector<int> spiralOrder(vector<vector<int>>& matrix) { vector<int> res; int x = 0, y = 0, i = 0, n = matrix.size(); if(n==0) return res; int m = matrix[0].size(); vector<vector<bool>> isVisited(n,vector<bool>(m,false)); isVisited[0][0]=true; res.push_back(matrix[x][y]); for(int j=1;j<n*m;j++){ //cout<<j<<endl; int a = x + dx[i]; int b = y + dy[i]; //cout<<j<<" "<<a<<endl; if(a>=m||a<0||b>=n||b<0||isVisited[b][a]){ i=(i+1)%4; a = x + dx[i]; b = y + dy[i]; } x = a; y = b; isVisited[b][a] = true; res.push_back(matrix[b][a]); } return res; } }; class Solution { public: vector<vector<int>> generateMatrix(int n) { const int dx[]={1,0,-1,0}; const int dy[]={0,1,0,-1}; int x = 0, y = 0, i = 0; if(n==0) return {}; vector<vector<int>> res(n,vector<int>(n,0)); res[0][0] = 1; for(int j=2;j<=n*n;j++){ int a = x + dx[i]; int b = y + dy[i]; if(a>=n||a<0||b>=n||b<0||res[b][a]){ i=(i+1)%4; a = x + dx[i]; b = y + dy[i]; } x = a; y = b; res[b][a] = j; } return res; } };