• 顺时针打印矩阵


    题目描述

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

    不一样的烟火
  • 相关阅读:
    大数据时代下的隐私保护(二)
    互联网+究竟想干什么
    MySql触发器使用解说
    系统函数C字符串的实现(12):strset
    參加湛江新教育群线下活动有感
    Axure多人协作
    hdu (1556 树状数组)
    [leetcode]Subsets II
    Oracle insert all语句介绍
    JQuery 实现锚点链接之间的平滑滚动
  • 原文地址:https://www.cnblogs.com/cstdio1/p/11235884.html
Copyright © 2020-2023  润新知