顺时针打印矩阵
顺时针打印矩阵
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; } };