题目
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5]
示例 2:
输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]] 输出:[1,2,3,4,8,12,11,10,9,5,6,7]
解题
和leetcode-54:螺旋矩阵是一样的
方法一:模拟
class Solution { public: vector<int> spiralOrder(vector<vector<int>>& matrix) { if(matrix.empty()) return {}; int m=matrix.size(); int n=matrix[0].size(); int left=0,top=0,right=n-1,down=m-1; vector<vector<int>> dirs={{0,1},{1,0},{0,-1},{-1,0}}; int cur_d=0; int x=0,y=0; vector<int> res; for(int i=0;i<m*n;i++){ int val=matrix[x][y]; res.push_back(val); if(cur_d==0&&y==right){ top++; cur_d++; } else if(cur_d==1&&x==down){ right--; cur_d++; } else if(cur_d==2&&y==left){ down--; cur_d++; } else if(cur_d==3&&x==top){ left++; cur_d++; } cur_d%=4; x+=dirs[cur_d][0]; y+=dirs[cur_d][1]; } return res; } };