zoukankan      html  css  js  c++  java
  • Spiral Matrix 解答

    Question

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

    For example,
    Given the following matrix:

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

    You should return [1,2,3,6,9,8,7,4,5].

    Solution

    这道题只有笨方法,就是老老实实地遍历输入的二维数组,得到结果。

    但是在遍历时有个技巧,就是按照环来遍历。(x, y)为遍历点的坐标。我们发现,当遍历完一圈后,(x, y)又会回到起点。所以对于接下来里面一圈的遍历,只需x++, y++即可。

    由于输入不一定是正方形,有可能最后剩的一圈是一行或一列,此时根据省下的行数/列数判断,另行处理。

     1 public class Solution {
     2     public List<Integer> spiralOrder(int[][] matrix) {
     3         List<Integer> result = new ArrayList<Integer>();
     4         if (matrix == null || matrix.length < 1)
     5             return result;
     6         int m = matrix.length, n = matrix[0].length, x = 0, y = 0;
     7         while (m > 0 && n > 0) {
     8             // If only one row left
     9             if (m == 1) {
    10                 for (int i = 0; i < n; i++)
    11                     result.add(matrix[x][y++]);
    12                 break;
    13             }
    14             // If only one column left
    15             if (n == 1) {
    16                 for (int i = 0; i < m; i++)
    17                     result.add(matrix[x++][y]);
    18                 break;
    19             }
    20             // Otherwise, we traverse in a circle
    21             // Left to Right
    22             for (int i = 0; i < n - 1; i++)
    23                 result.add(matrix[x][y++]);
    24             // Up to Down
    25             for (int i = 0; i < m - 1; i++)
    26                 result.add(matrix[x++][y]);
    27             // Right to Left
    28             for (int i = 0; i < n - 1; i++)
    29                 result.add(matrix[x][y--]);
    30             // Down to Up
    31             for (int i = 0; i < m - 1; i++)
    32                 result.add(matrix[x--][y]);
    33             x++;
    34             y++;
    35             m -= 2;
    36             n -= 2;
    37         }
    38         return result;
    39     }
    40 }
  • 相关阅读:
    RocketMQ4.5.2在centos7的安装
    android 9.x 实现应用内更新安装
    android listview 禁止滚动
    Failed to resolve loader: less-loader
    yarn的 文件名、目录名或卷标语法不正确
    Interceptor无法用Autowired自动注入Bean
    STL文件格式研究
    在C#中用COM操作CAD
    AVEVA CSG 几何图形输出接口
    PDMS数据库快速索引查询
  • 原文地址:https://www.cnblogs.com/ireneyanglan/p/4890842.html
Copyright © 2011-2022 走看看