顺时针打印矩阵

题目描述

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.  

这道题和2018blibli笔试题是一个类型的(几乎是一样的):https://www.cnblogs.com/cstdio1/p/11083964.html

 常规解题思路:加上一个vis数组用来判断是否遍历过此点,再加上一个大的控制结束的循环和4个方向的循环就可解题

 

class Solution {
public:
    vector<int> printMatrix(vector<vector<int> >a) {
     int vis[100][100]={0};
       int i=0,j=0;
       int s=0;
       int rows=a.size(),cols=a[0].size(); 
       vector<int> result;//结果向量保存输出结果 
       while(s!=rows*cols){

       while(j<cols&&vis[i][j]==0){//turn right
       result.push_back(a[i][j]);
        vis[i][j]=1;
        s++;j++;   
       }j--;i++;
           
       while(i<rows&&vis[i][j]==0){//turn down
         result.push_back(a[i][j]);
         vis[i][j]=1;
         s++;i++;              
       }i--;j--;
           
       while(j>=0&&vis[i][j]==0){//turn left,注意j>=0,最开始鞋厂j>0害我检查半天
         result.push_back(a[i][j]);
         vis[i][j]=1;
         s++;j--; 
       }j++;i--;
           
       while(i>=0&&vis[i][j]==0){//turn right,注意j>=0,最开始鞋厂i>0害我检查半天
        result.push_back(a[i][j]);
         vis[i][j]=1;
         s++;i--;           
       }i++;j++;
       }return result;
   }
};

 

 

class Solution {
    public int[] spiralOrder(int[][] matrix) {
    if(matrix==null||matrix.length==0) return new int[0];    
    int m=matrix.length,n=matrix[0].length;
    boolean [][]flag = new boolean [m][n];//标记数组
    int []res = new int[m*n];//结果数组
    int cnt=0;//计数器判断是否终止
    int i=0,j=0;//行和列
    while(cnt<m*n){
        while(j<n&&flag[i][j]==false){//right
        res[cnt++]=matrix[i][j];
        flag[i][j]=true;
        j++;
        }
        j--;//碰壁之后回退一格
        i++;//向下一个(因为此元素已经遍历过了)  
        while(i<m&&flag[i][j]==false){//down
        res[cnt++]=matrix[i][j];
        flag[i][j]=true;
        i++;
        }
        i--;
        j--;
      
        while(j>=0&&flag[i][j]==false){//left
         res[cnt++]=matrix[i][j];
         flag[i][j]=true;
         j--; 
        }
        j++;
        i--;
        while(i>=0&&flag[i][j]==false){//up
            res[cnt++]=matrix[i][j];
            flag[i][j]=true;
            i--;
        }
        i++;
        j++;
    }
    return res;
}

}

 

posted @ 2019-07-24 09:30  浅滩浅  阅读(303)  评论(0编辑  收藏  举报