zoukankan      html  css  js  c++  java
  • 无聊系列

    前段时间无意中看到一个螺旋矩阵的面试题,于是网上搜了下,发现有两种螺旋矩阵:

    1. 百度百科上描述的这种:https://baike.baidu.com/item/%E8%9E%BA%E6%97%8B%E7%9F%A9%E9%98%B5/3528521?fr=aladdin

    2. leet code上的螺旋矩阵输出。

    先贴百科上的:

     1 public class SpiralMatrix {
     2     public static void main(String[] args) {
     3         int n = 11, m = 7;
     4 
     5         int[][] elements = new int[n][m];
     6 
     7         int temp = 0;
     8         int row = 0, col = 0;
     9         int maxN = n, maxM = m;
    10 
    11         while (temp < n * m) {
    12 
    13             int tempRow = row, tempCol = col;
    14             // top
    15             for (; tempCol < maxM; tempCol++) {
    16                 temp++;
    17                 elements[tempRow][tempCol] = temp;
    18             }
    19 
    20             if (temp >= n * m)
    21                 break;
    22 
    23             // right
    24             tempCol--;
    25             for (tempRow = tempRow + 1; tempRow < maxN; tempRow++) {
    26                 temp++;
    27                 elements[tempRow][tempCol] = temp;
    28             }
    29             if (temp >= n * m)
    30                 break;
    31             tempRow--;
    32 
    33             // bottom
    34             tempCol--;
    35             for (; tempCol >= m - maxM; tempCol--) {
    36                 temp++;
    37                 elements[tempRow][tempCol] = temp;
    38             }
    39             if (temp >= n * m)
    40                 break;
    41             // left
    42             tempCol++;
    43             for (tempRow = tempRow - 1; tempRow > n - maxN; tempRow--) {
    44                 temp++;
    45                 elements[tempRow][tempCol] = temp;
    46             }
    47 
    48             if (temp >= n * m)
    49                 break;
    50 
    51             row++;
    52             col++;
    53 
    54             maxM--;
    55             maxN--;
    56         }
    57 
    58         for (int i = 0; i < n; i++) {
    59             for (int j = 0; j < m; j++) {
    60                 if (elements[i][j] < 10)
    61                     System.out.print("0");
    62 
    63                 System.out.print(elements[i][j]);
    64                 System.out.print("  ");
    65             }
    66             System.out.println();
    67         }
    68     }
    69 }

    【力扣算法】54-螺旋矩阵:

     1 public static List<Integer> spiralOrder(int[][] matrix) {
     2         List<Integer> result = new LinkedList<>();
     3         
     4         if (matrix.length == 0)
     5             return result;        
     6 
     7         int maxRow = matrix.length;
     8         int maxCol = matrix[0].length;
     9 
    10         int total = maxRow * maxCol;
    11 
    12         // 统计已经读取了多少个数字
    13         int num = 0;
    14 
    15         int row = 0, col = 0;
    16 
    17         while (num < total) {
    18             int tempRow = row, tempCol = col;
    19             // top
    20             for (; tempCol < maxCol; tempCol++) {
    21                 num++;
    22                 result.add(matrix[tempRow][tempCol]);
    23             }
    24             // 读取的个数达到矩阵元素总数,则退出循环
    25             if (num >= total)
    26                 break;
    27 
    28             // right
    29             tempCol--;
    30             for (tempRow = tempRow + 1; tempRow < maxRow; tempRow++) {
    31                 num++;
    32                 result.add(matrix[tempRow][tempCol]);
    33             }
    34             tempRow--;
    35 
    36             if (num >= total)
    37                 break;
    38 
    39             // bottom
    40             tempCol--;
    41             for (; tempCol >= col; tempCol--) {
    42                 num++;
    43                 result.add(matrix[tempRow][tempCol]);
    44             }
    45             if (num >= total)
    46                 break;
    47 
    48             // left
    49             tempCol++;
    50             for (tempRow = tempRow - 1; tempRow > row; tempRow--) {
    51                 num++;
    52                 result.add(matrix[tempRow][tempCol]);
    53             }
    54 
    55             if (num >= total)
    56                 break;
    57 
    58             row++;
    59             col++;
    60 
    61             maxCol--;
    62             maxRow--;
    63         }
    64 
    65         return result;
    66     }
    67 
    68     public static void main(String[] args) {
    69         int[][] matrix = new int[][] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
    70 
    71         matrix = new int[][] { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 } };
    72 
    73         List<Integer> result = spiralOrder(matrix);
    74 
    75         for (Integer integer : result) {
    76             System.out.print(integer);
    77             System.out.print("  ");
    78         }
    79     }

    【力扣算法】54-螺旋矩阵

  • 相关阅读:
    【洛谷P3628】特别行动队
    【洛谷P3233】世界树
    【BZOJ1597】土地购买
    【洛谷P4068】数字配对
    【洛谷P3899】谈笑风生
    【BZOJ2726】任务安排
    【洛谷P6186】[NOI Online 提高组] 冒泡排序
    【洛谷P3369】【模板】普通平衡树
    【UOJ#8】Quine
    标准 插入flash
  • 原文地址:https://www.cnblogs.com/chongsha/p/11946349.html
Copyright © 2011-2022 走看看