• Spiral Matrix


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

    这道题用的递归的思想,将最外面一层添加到result列表中,然后将剩下元素作为一个数组,做下一次递归,感觉有点土,晚点去搜点高大上的

     1 import java.util.ArrayList;
     2 import java.util.Arrays;
     3 import java.util.List;
     4 
     5 
     6 
     7 
     8 
     9 //class ListNode {
    10 //      public int val;
    11 //      public ListNode next;
    12 //      ListNode(int x) {
    13 //          val = x;
    14 //          next = null;
    15 //      }
    16 //  }
    17 
    18 public class Solution {
    19     List<Integer> result = new ArrayList<Integer>();
    20     
    21     public List<Integer> spiralOrder(int[][] matrix) {
    22         if(null == matrix || matrix.length == 0)
    23             return result;
    24         
    25         else if(matrix.length == 1 && matrix[0].length == 1)    //只有一个元素直接添加
    26             result.add(matrix[0][0]);
    27         else if(matrix[0].length == 1){                        //竖条
    28             for(int i = 0; i < matrix.length; i++){
    29                 result.add(matrix[i][0]);                //直接添加
    30             }   
    31         }
    32         else if(matrix.length == 1){                    //横条
    33             for(int i = 0; i < matrix[0].length; i++){
    34                 result.add(matrix[0][i]);
    35             }
    36         }
    37         else {
    38             for(int i = 0; i < matrix[0].length; i++){    //添加第一排
    39                 result.add(matrix[0][i]);
    40             }
    41             for(int i = 1; i < matrix.length; i++){        //添加最后一竖
    42                 result.add(matrix[i][matrix[0].length - 1]);
    43             }
    44             for(int i = matrix[0].length - 2; i >= 0; i--){    //添加最后一排
    45                 result.add(matrix[matrix.length - 1][i]);
    46             }
    47             for(int i = matrix.length - 2; i >= 1;i--){        //添加第一排
    48                 result.add(matrix[i][0]);
    49             }
    50             if(matrix.length - 2 != 0 && matrix[0].length - 2 != 0){
    51                 int next[][] = new int[matrix.length - 2][matrix[0].length - 2];
    52                 for(int i = 1; i < matrix.length - 1; i++){
    53                     for(int j = 1; j < matrix[0].length - 1;j++){
    54                         next[i - 1][j - 1] = matrix[i][j];
    55                     }
    56                 }
    57                 spiralOrder(next);                                //递归求解下一个矩阵的值
    58             }
    59             
    60         }
    61         
    62         return result;
    63     }
    64 }
  • 相关阅读:
    红黑树——以无厚入有间
    红黑树——依天理以神遇
    B-树 分合之道
    B-树 动机与结构
    云心出岫——Splay Tree
    双散列和再散列暨散列表总结
    开放定址法——平方探测(Quadratic Probing)
    [LeetCode 109]
    [LeetCode 110]
    [LeetCode 111]
  • 原文地址:https://www.cnblogs.com/luckygxf/p/4151858.html
Copyright © 2020-2023  润新知