zoukankan      html  css  js  c++  java
  • 顺时针打印矩阵

    题目来源:牛客网

    对于一个矩阵,请设计一个算法从左上角(mat[0][0])开始,顺时针打印矩阵元素。

    给定int矩阵mat,以及它的维数nxm,请返回一个数组,数组中的元素为矩阵元素的顺时针输出。

    测试样例:
    [[1,2],[3,4]],2,2
    返回:[1,2,4,3]


    一个n行m列的矩阵


    图中startY=endY=1,表示只剩下一行了。因为X方向还没到尽头(startX=1,endX=2)。
    同理,当startX==endX时,表示只剩下一列了。
     1 public int[] clockwisePrint(int[][] mat, int n, int m) {
     2 
     3     int[] res = new int[n*m];
     4     if(mat ==null) return res;
     5 
     6     int i=0;
     7 
     8     int startX=0, startY=0,endX=m-1,endY=n-1;
     9     while(startX<=endX && startY<=endY){
    10 
    11         // 剩下一列
    12         if(startX==endX){
    13             for(int j=startY;j<=endY;++j)
    14                 res[i++] = mat[j][startX];
    15             break;
    16         }
    17 
    18         // 剩下一行
    19         if(startY==endY){
    20             for(int j=startX;j<=endX;++j)
    21                 res[i++] = mat[startY][j];
    22             break;
    23         }
    24 
    25         // 从左到右上面一行(除了右上角那个数)
    26         for(int j=startX; j<endX; ++j) {
    27             res[i++] = mat[startY][j];
    28         }
    29 
    30         // 从上到下右边一列(除了右下角那个数)
    31         for(int j=startY; j<endY; ++j) {
    32             res[i++] = mat[j][endX];
    33         }
    34 
    35         // 从右到左底部一行(除了左下角那个数)
    36         for(int j=endX; j>startX; j--) {
    37             res[i++] = mat[endY][j];
    38         }
    39 
    40         // 从下到上左边一列(除了左上角那个数)
    41         for(int j=endY; j>startY; j--) {
    42             res[i++] = mat[j][startX];
    43         }
    44 
    45         startX++;
    46         startY++;
    47         endX--;
    48         endY--;
    49     }
    50 
    51     return res;
    52 }
    53   
    
    
    
     
  • 相关阅读:
    【Linux学习七】软件安装
    【Linux学习六】用户管理
    【Linux学习五】文本处理
    【Linux学习四】正则表达式
    【Linux学习三】VI/VIM全屏文本编辑器
    【Linux学习二】文件系统
    【Linux学习一】命令查看与帮助
    【安装虚拟机四】设置快照和克隆
    【安装虚拟机三】设置Linux IP地址
    SpringBoot之定时任务详解
  • 原文地址:https://www.cnblogs.com/duanguyuan/p/5644976.html
Copyright © 2011-2022 走看看