题解 | #顺时针打印矩阵#
顺时针打印矩阵
http://www.nowcoder.com/practice/9b4c81a02cd34f76be2659fa0d54342a
[1,2,3,4]
[5,6,7,8]
[9,10,11,12]
[13,14,15,16]
思路:
1.输出第一行: ans=[1,2,3,4]
2.然后把剩下的矩阵逆时针旋转90度:
[8,12,16]
[7,11,15]
[6,10,14]
[5,9,13]
3.重复以上操作:ans=[1,2,3,4,8,12,16]
[15,14,13]
[11,10,9]
[7,6,5]
4.直到矩阵为空
c++代码:
class Solution { public: vector<vector<int> > rotate(vector<vector<int> > matrix){ int m = matrix.size(); int n = matrix[0].size(); if(m<=1&&n<=1) return matrix; vector<vector<int> > ans(n); for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ ans[j].push_back(matrix[i][n-j-1]); } } return ans; } vector<int> printMatrix(vector<vector<int> > matrix) { vector<int> ans; int s=1; while(s){ int m = matrix.size(); int n = matrix[0].size(); vector<vector<int> > temp(m-1); for(int j=0;j<n;j++){ ans.push_back(matrix[0][j]); for(int i=0;i<m-1;i++){ temp[i].push_back(matrix[i+1][j]); } } if(temp.size()) matrix = rotate(temp); else matrix={}; s = matrix.size(); } return ans; } };