zoukankan      html  css  js  c++  java
  • leetCode 54. Spiral Matrix

    Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.

    Example 1:

    Input:
    [
     [ 1, 2, 3 ],
     [ 4, 5, 6 ],
     [ 7, 8, 9 ]
    ]
    Output: [1,2,3,6,9,8,7,4,5]
    

    Example 2:

    Input:
    [
      [1, 2, 3, 4],
      [5, 6, 7, 8],
      [9,10,11,12]
    ]
    Output: [1,2,3,4,8,12,11,10,9,5,6,7]

    思路很简单,整个输出过程用rowLowerBound,rowUpperBound,colLowerBound,colUpperBound来控制边界。输出时要控制边界缩小,并且输出的内容要在边界内。
    几种特殊情况:
         {1,2,3,4},
    {5,6,7,8},
    {9,10,11,12}

    {1,2,3},
    {4,5,6},
    {7,8,9}

    {1 , 2, 3, 4, 5},
    {6, 7, 8 ,9,10},
    {11,12,13,14,15},
    {16,17,18,19,20},
    {21,22,23,24,25}

    { 1, 2, 3, 4, 5, 6},
    { 7, 8, 9,10,11,12},
    {13,14,15,16,17,18},
    {19,20,21,22,23,24}

    {6,9,7}

    {1},
    {2},
    {3}

    {1,2},
    {3,4},
    {5,6},
    {7,8}


     1 class Solution {
     2     public List<Integer> spiralOrder(int[][] matrix) {
     3         int row, col;
     4         row = matrix.length;
     5         ArrayList<Integer> list = new ArrayList<>();
     6         if (row == 0)
     7             return list;
     8         col = matrix[0].length;
     9 
    10         /*
    11         只能在边界内循环
    12          */
    13         int rowLowerBound = 0, rowUpperBound = row-1;
    14         int colLowerBound = 0, colUpperBound = col-1;
    15         while (rowLowerBound <= rowUpperBound && colLowerBound <= colUpperBound){
    16             /*
    17             沿着行rowLowerBound从左至右输出
    18             沿着列colUpperBound从上到右输出
    19             沿着行rowUpperBound从右到左输出
    20             沿着列colLowerBound从下到上输出
    21 
    22             变更边界条件(转向内层矩阵,等于是将原来矩阵剥了一层皮)
    23             rowLowerBound+1, rowUpperBound-1, colLowerBound+1,colUpperBound-1
    24              */
    25             for (int i = colLowerBound, flag = 1; i < colUpperBound; i++) {//
    26                 list.add(matrix[rowLowerBound][i]);
    27                 if (rowLowerBound == rowUpperBound){
    28                     ++colLowerBound;
    29                 }else if(colLowerBound < colUpperBound && flag == 1 && rowUpperBound != row-1){
    30                     ++colLowerBound;
    31                     flag = 0;
    32                 }
    33             }
    34             for (int i = rowLowerBound, flag = 1; i < ((rowUpperBound == 0) ? 1 : rowUpperBound); i++) {//
    35                 list.add(matrix[i][colUpperBound]);
    36 
    37                 if (colLowerBound == colUpperBound){
    38                     ++rowLowerBound;
    39                 }else if(rowLowerBound < rowUpperBound && flag == 1) {
    40                     ++rowLowerBound;
    41                     flag = 0;
    42                 }
    43             }
    44             for (int i = colUpperBound, flag = 1; i > colLowerBound; i--) {//
    45                 list.add(matrix[rowUpperBound][i]);
    46                 if(rowLowerBound == rowUpperBound)
    47                     --colUpperBound;
    48                 else if (colLowerBound < colUpperBound && flag == 1){
    49                     --colUpperBound;
    50                     flag = 0;
    51                 }
    52             }
    53             for (int i = rowUpperBound, flag = 1; i > rowLowerBound; i--) {//
    54                 list.add(matrix[i][colLowerBound]);
    55                 if (colLowerBound == colUpperBound)
    56                     --rowUpperBound;
    57                 else if (rowLowerBound < rowUpperBound && flag == 1){
    58                     --rowUpperBound;
    59                     flag = 0;
    60                 }
    61             }
    62             if (rowLowerBound == rowUpperBound && colLowerBound == colUpperBound){
    63                 list.add(matrix[rowLowerBound][colLowerBound]);
    64                 break;
    65             }
    66         }
    67         return list;
    68     }
    69 }
  • 相关阅读:
    Linux下安装mysql-5.7.30(笔记)
    配置jmeter、java环境变量
    离线安装grafana、influxdb
    Grafana接入influxdb数据,提示 “Failed to fetch”、“BAD GATAWAY”错误
    ALINX紫光同创国产FPGA开发板PGL22G发布
    ALINX紫光同创国产FPGA开发板PGL12G发布
    【紫光同创国产FPGA教程】【第二十八章】USB双向测速例程
    【紫光同创国产FPGA教程】【第二十七章】千兆以太网视频传输实验
    【紫光同创国产FPGA教程】【第二十六章】AD9280以太网传输
    【紫光同创国产FPGA教程】【第二十五章】AD7606以太网传输
  • 原文地址:https://www.cnblogs.com/yfs123456/p/10888055.html
Copyright © 2011-2022 走看看