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

    原题链接在这里:https://leetcode.com/problems/spiral-matrix/

    题目:

    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].

    题解:

    转圈取值. 矩阵size 是 m*n.

    r1 = 0, r2 = m - 1, c1 = 0, c2 = n - 1 as boundary.

    while loop condition r1 <= r2, and c1 <= c2. As this fullfills, we need to fill the value to res.

    When there is only one row or one column left, we only need first 2 for loops. To check this, use r1 < r2 && c1 < c2. 

    As when r1 == r2 || c1 == c2, there is only one row or one column left.

    Time Complexity: O(m*n). Space: O(m*n).

    AC Java:

     1 class Solution {
     2     public List<Integer> spiralOrder(int[][] matrix) {
     3         List<Integer> res = new ArrayList<>();
     4         if(matrix == null || matrix.length == 0 || matrix[0].length == 0){
     5             return res;
     6         }
     7         
     8         int m = matrix.length;
     9         int n = matrix[0].length;
    10         int r1 = 0, c1= 0;
    11         int r2 = m - 1, c2 = n - 1;
    12         while(r1 <= r2 && c1 <= c2){
    13             for(int c = c1; c <= c2; c++){
    14                 res.add(matrix[r1][c]);
    15             }
    16             
    17             for(int r = r1 + 1; r <= r2; r++){
    18                 res.add(matrix[r][c2]);
    19             }
    20             
    21             if(r1 < r2 && c1 < c2){
    22                 for(int c = c2 - 1; c >= c1; c--){
    23                     res.add(matrix[r2][c]);
    24                 }
    25                 
    26                 for(int r = r2 -1; r > r1; r--){
    27                     res.add(matrix[r][c1]);
    28                 }
    29             }
    30             
    31             r1++;
    32             r2--;
    33             c1++;
    34             c2--;
    35         }
    36         
    37         return res;
    38     }
    39 }

    跟上Spiral Matrix IISpiral Matrix III.

    类似Diagonal Traverse.

  • 相关阅读:
    UEditor 编辑模板
    Task ProgressBar模拟现实完成后显示TextBox
    Java Lambda map返回部分属性
    Socket编程
    字节流和字符流
    File类
    volatile的作用和原理
    Java四种引用类型
    ThreadLocal
    孤儿进程和僵尸进程
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/4839906.html
Copyright © 2011-2022 走看看