题解 | #顺时针打印矩阵#
顺时针打印矩阵
http://www.nowcoder.com/practice/9b4c81a02cd34f76be2659fa0d54342a
思路:就是一个模拟,跟紫书上那道蛇形矩阵一样,紫书讲的很好,首先模拟顺序是右下左上,用一个vis数组标记访问过的点,每次走之前需要先判断能不能走而不是先走,这样避免了越界问题。O(n*m)
class Solution { public: vector<int> printMatrix(vector<vector<int> > e) { int cnt=1,x=0,y=0,n=e.size(),m=e[0].size(); int vis[n+5][m+5]; memset(vis,0,sizeof vis); vector<int>res; res.push_back(e[0][0]); vis[0][0]=1; while(1){ if(cnt==n*m)break; while(y+1<m&&!vis[x][y+1]){ y++; res.push_back(e[x][y]); vis[x][y]=1; cnt++; } while(x+1<n&&!vis[x+1][y]){ x++; res.push_back(e[x][y]); vis[x][y]=1; cnt++; } while(y-1>=0&&!vis[x][y-1]){ y--; res.push_back(e[x][y]); vis[x][y]=1; cnt++; } while(x-1>=0&&!vis[x-1][y]){ x--; res.push_back(e[x][y]); vis[x][y]=1; cnt++; } } return res; } };