[LeetCode] Spiral Matrix

来源:互联网 发布:java图形用户界面实例 编辑:程序博客网 时间:2024/04/29 12:04

Total Accepted: 7416 Total Submissions: 36640

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

1.

public class Solution {    public ArrayList<Integer> spiralOrder(int[][] matrix) {        ArrayList<Integer>  list = new ArrayList<Integer>();        int                 m = matrix.length;        if (m == 0)         return list;        int                 n = matrix[0].length;        int                 level = n > m ? (m + 1) >> 1 : (n + 1) >> 1;                // iterate through each layer        // 1,2 3,6 9,8 7,4 (nxn && n > 1)        for (int iter = 0; iter < level; iter++) {            if ((m - 2 * iter) == 1) {                for (int i = iter; i < n - iter; i++)                    list.add(matrix[iter][i]);            }            else if ((n - 2*iter) == 1) {                for (int i = iter; i < m -iter; i++)                    list.add(matrix[i][iter]);            }            else {                for (int i = iter; i < n - 1 - iter; i++)                          list.add(matrix[iter][i]);                for (int i = iter; i < m - 1 - iter; i++)                          list.add(matrix[i][n - 1 - iter]);                for (int i = n - 1 - iter; i > iter; i--)                          list.add(matrix[m - 1 - iter][i]);                for (int i = m - 1 - iter; i > iter; i--)                          list.add(matrix[i][iter]);            }        }                return list;    }}
public class Solution {    public ArrayList<Integer> spiralOrder(int[][] matrix) {        ArrayList<Integer>  list = new ArrayList<Integer>();        int                 m = matrix.length;        if (m == 0)         return list;        int                 n = matrix[0].length;        int xlo = 0, ylo = 0, xhi = n - 1, yhi = m -1;                while (xlo <= xhi && ylo <= yhi) {            for (int i = xlo; i <= xhi; i++)                      list.add(matrix[ylo][i]);                            for (int i = ylo + 1; i <= yhi; i++)                      list.add(matrix[i][xhi]);                            if (ylo != yhi)                for (int i = xhi - 1; i >= xlo; i--)                          list.add(matrix[yhi][i]);                            if (xlo != xhi)                for (int i = yhi - 1; i > ylo; i--)                          list.add(matrix[i][xlo]);                            xlo++;            xhi--;            ylo++;            yhi--;        }                return list;    }}


0 0
原创粉丝点击