zoukankan      html  css  js  c++  java
  • 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].

    复用spiral Matrix 代码即可。 注意这里m 不见得等于n, 所以有三种情况。

     1 public class Solution {
     2     public ArrayList<Integer> spiralOrder(int[][] matrix) {
     3         // Note: The Solution object is instantiated only once and is reused by each test case.
     4         if(matrix == null) return null;
     5         ArrayList<Integer> l = new ArrayList<Integer>();
     6         if(matrix.length == 0 || matrix[0].length == 0) return l;
     7         int m = matrix.length;
     8         int n = matrix[0].length;
     9         int top = 0;
    10         int bot = m - 1;
    11         int left = 0;
    12         int right = n - 1;
    13         while(top < bot && left <right)
    14         {
    15              for(int i = left; i < right; i ++)
    16              {
    17                  l.add(matrix[top][i]);
    18              }
    19              for(int i = top; i < bot; i ++)
    20              {
    21                  l.add(matrix[i][right]);
    22              }
    23              for(int i = right; i > left; i --)
    24              {
    25                  l.add(matrix[bot][i]);
    26              }
    27              for(int i = bot; i > top; i --)
    28              {
    29                  l.add(matrix[i][left]);    
    30              }
    31              top ++;
    32              bot --;
    33              left ++;
    34              right --;
    35         }
    36         if(top == bot && left == right)
    37         {
    38             l.add(matrix[top][left]);
    39         }else if(top < bot && left == right)
    40         {
    41             for(int i = top; i <= bot; i ++)
    42             {
    43                 l.add(matrix[i][left]);
    44             }
    45         }else if(left < right && top == bot)
    46         {
    47             for(int i = left; i <= right; i ++)
    48              {
    49                  l.add(matrix[top][i]);
    50              }
    51         }
    52         return l;
    53     }
    54 }

    注意三种情况:

    1. 这时循环是<=, 因为要一行输出所以 全部都输出。

    2. 可能top > bot(left > right), 这说明是偶数行(列), 那么就不用在输出什么了。

    第三遍:

     1 public class Solution {
     2     public List<Integer> spiralOrder(int[][] matrix) {
     3         ArrayList<Integer> result = new ArrayList<Integer>();
     4         if(matrix == null || matrix.length == 0 || matrix[0].length == 0) return result;
     5         int top = 0, bot = matrix.length - 1, left = 0, right = matrix[0].length - 1;
     6         while(top < bot && left < right){
     7             for(int i = left; i < right; i ++)
     8                 result.add(matrix[top][i]);
     9             for(int i = top; i < bot; i ++)
    10                 result.add(matrix[i][right]);
    11             for(int i = right; i > left; i --)
    12                 result.add(matrix[bot][i]);
    13             for(int i = bot; i > top; i --)
    14                 result.add(matrix[i][left]);
    15             top ++; left ++; bot --; right --;
    16         }
    17         if(top < bot && left == right){
    18             for(int i = top; i <= bot; i ++){
    19                 result.add(matrix[i][left]);
    20             }
    21         } else if (top == bot && left < right){
    22             for(int i = left; i <= right; i ++){
    23                 result.add(matrix[top][i]);
    24             }
    25         }else if (top == bot && left == right)
    26             result.add(matrix[top][left]);
    27         return result;
    28     }
    29 }
  • 相关阅读:
    invokerequied
    C#如何用正则表达式截取https和带端口的域名
    flex datagrid combox
    java webservice
    Flexlib 控件 http://code.google.com/p/flexlib/
    Git使用
    转:Vim常用命令
    转:oracle连接查询
    Axis2 spring发布WebService
    oracle jdbc example 示例
  • 原文地址:https://www.cnblogs.com/reynold-lei/p/3351391.html
Copyright © 2011-2022 走看看