题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
这是一道经典的二维矩阵遍历问题,仔细体会以下代码
class Solution {
public:
vector<int> printMatrix(vector<vector<int> > matrix) {
int n = matrix.size();
vector<int> res;
if(n==0) return res;
int m = matrix[0].size();
const int dx[] = {0,1,0,-1};
const int dy[] = {1,0,-1,0};
vector<vector<bool>> visited(n,vector<bool>(m,false));
int x=0,y=0,k=0;
for(int i=0;i<n*m;i++){
res.push_back(matrix[x][y]);
visited[x][y] = true;
int x_ = x+dx[k];
int y_ = y+dy[k];
if(x_<0 || x_>=n || y_<0 || y_>=m || visited[x_][y_]){
k=(k+1)%4;
x_ = x+dx[k];
y_ = y+dy[k];
}
x=x_,y=y_;
}
return res;
}
};