AcWing 40. 顺时针打印矩阵
原题链接
中等
作者:
梵高先生
,
2020-05-09 18:35:14
,
所有人可见
,
阅读 787
C++ 代码 姑且称之为遍历即可
class Solution {
public:
vector<int> printMatrix(vector<vector<int> > matrix) {
vector<int> res;
if(matrix.size() == 0 || matrix[0].size() == 0) return res;
int n = matrix.size(); // 行
int m = matrix[0].size(); //列
vector<vector<bool>> b(n,vector<bool>(m,false));
int d[4][2] = {
{0,1}, //right
{1,0}, // down
{0,-1}, //left
{-1,0} //up
};
int x = 0 , y = 0;
int k = 0; //k:0-3
res.push_back(matrix[0][0]);
b[0][0] = true;
for(int i = 0; i < m*n - 1; i++){
x += d[k][0];
y += d[k][1];
if(x >= 0 && x < n && y >= 0 && y < m && (!b[x][y])){
res.push_back(matrix[x][y]);
b[x][y] = true;
}
else{//回退
x -= d[k][0];
y -= d[k][1];
k = (k + 1) % 4;
i--;
}
}
return res;
}
};