题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.
解题思路
这道题的标签是较难,但好像也没有较难的地方,就是按照顺时针的顺序遍历数组,然后输出。我把顺时针转的一个圈看成一个循环,每一趟循环又分成四个小循环,分别是上边一行,右边一列,下边一行,左边一列,判断好这些边界关系即可
我遇到的问题
1、矩阵不一定是方形的,有可能是矩形的,矩阵宽:array.size(),长:array[0].size()
2、每一圈的循环不一定是包括四个,可能只有上边一行,可能只有上边一行+右边一列,可能只有上边一行+右边一列+下边一行,要覆盖到所有的情况
3、关于一共几圈的循环判断 每次循环都以行-2,列-2为计数器,当这两个值都减到0时,循环也就结束了
源代码
class Solution {
public:
vector<int> printMatrix(vector<vector<int> > matrix) {
int len=matrix.size();
int hang=matrix[0].size();
vector<int> chloe;
for(int i=0;len-i*2>0&&hang-2*i>0;i++){
for(int j=i;j<hang-i;j++){
chloe.push_back(matrix[i][j]);
}
for(int k=i+1;k<len-i;k++){
chloe.push_back(matrix[k][hang-i-1]);
}
if(len-2*i-1>0){
for(int m=hang-i-2;m>=i;m--){
chloe.push_back(matrix[len-i-1][m]);
}}
if(hang-i-2>=0){
for(int n=len-i-2;n>i;n--){
chloe.push_back(matrix[n][i]);
}}
}
return chloe;
}
};