题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
1 2 3 4
5 6 7 8
9 10 11 12
12 14 15 16 输出为:1 2 3 4 8 12 16 15 14 12 9 5 6 7 11 10
思路:可以直接按照从左到右、从上到下、从右到左、从下到上的顺序输出数组,关键是每一步执行的条件判断。在上下左右4个位置定义变量来控制循环输出,需要注意一些特殊情况,例如1*n矩阵,n*1矩阵时(我在编译时就忘掉了,然后发现调试不通过,看了测试用例才发现问题所在)。
vector<int> printMatrix(vector<vector<int> > matrix) { int rows=matrix.size(); int cols=matrix[0].size(); vector<int> result; if(rows==0&&cols==0) return result; //定义上、下、左、右初始位置 int left=0,top=0,right=cols-1,bottm=rows-1; //按顺时针输出 while(left<=right&&top<=bottm) { for(int i=left;i<=right;i++) result.push_back(matrix[top][i]); for(int i=top+1;i<=bottm;i++) result.push_back(matrix[i][right]); //判断是否存在下一行数字 if(top!=bottm) for(int i=right-1;i>=left;i--) result.push_back(matrix[bottm][i]); //判断是否存在下一列数字 if(left!=right) for(int i=bottm-1;i>top;i--) result.push_back(matrix[i][left]); left++,top++,right--,bottm--; } return result; }