题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
解决方法
class Solution {
public:
vector<int> printMatrix(vector<vector<int> > matrix) {
vector<int> res;
int n=matrix.size();
if(n==0) return res;
int m=matrix[0].size();
int row=0,col=0;//行列号
vector<vector<bool> > flag;//标记某位置上的数字是否被打印
vector<bool> temp(m); //注意1:二维vector定义是最后一个>前需要空格;注意2:vector数组下标调用前需定义好大小
flag.resize(n,temp);
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
flag[i][j]=false;
int num=0;
while(num!=n*m){
//右
while(col<m && !flag[row][col]) {flag[row][col]=true; res.push_back(matrix[row][col]); col++; num++;}
row++; col--;
//下
while(row<n && !flag[row][col]) {flag[row][col]=true; res.push_back(matrix[row][col]); row++; num++;}
row--;col--;
//左
while(col>=0 && !flag[row][col]) {flag[row][col]=true; res.push_back(matrix[row][col]); col--; num++;}
row--;col++;
//上
while(row>=0 && !flag[row][col]) {flag[row][col]=true; res.push_back(matrix[row][col]); row--; num++;}
row++;col++;
}
return res;
}
};