• 顺时针打印矩阵


    题目来源:牛客网

    对于一个矩阵,请设计一个算法从左上角(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   
    
    
    
     
  • 相关阅读:
    VUE学习一,安装及Hello World
    609. 在系统中查找重复文件
    451. 根据字符出现频率排序
    面试题 10.02. 变位词组
    142. 环形链表 II
    面试题 16.24. 数对和
    151. 翻转字符串里的单词
    1207. 独一无二的出现次数
    80. 删除排序数组中的重复项 II
    1365. 有多少小于当前数字的数字
  • 原文地址:https://www.cnblogs.com/duanguyuan/p/5644976.html
Copyright © 2020-2023  润新知