顺时针打印矩阵
顺时针打印矩阵
http://www.nowcoder.com/questionTerminal/9b4c81a02cd34f76be2659fa0d54342a
参考-中工升达预备毕业生-大佬的C++实现
class Solution {
public:
vector<int> printMatrix(vector<vector<int> > matrix) {
// 走的方向:向右、向下、向左、向上
int dx[4] = {0,1,0,-1};
int dy[4] = {1,0,-1,0};
int n = matrix.size(),m = matrix[0].size();
vector<int> ret;
bool vis[n][m];
for(int i=0;i<n;++i){
for(int j=0;j<m;++j){
vis[i][j] = false;
}
}
int x = 0,y = 0,dir = 0;
while(x>=0 && x<n && y>=0 && y<m && !vis[x][y]){
ret.push_back(matrix[x][y]);
vis[x][y] = true;
// 试着继续向dir的方向走
while(x+dx[dir]>=0 && x+dx[dir]<n && y+dy[dir]>=0 && y+dy[dir]<m && !vis[x+dx[dir]][y+dy[dir]]){
x += dx[dir];
y += dy[dir];
ret.push_back(matrix[x][y]);
vis[x][y] = true;
}
// 走不动了换方向
dir = (dir+1)%4;
x += dx[dir];
y += dy[dir];
}
return ret;
}
};
