【leetcode】54.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].

Tips:Input:一个m×n的二维数组,按照顺时针打印

解决办法:每一圈递归一次。

package medium;

import java.util.ArrayList;
import java.util.List;

public class L54SpiralMatrix {
    public List<Integer> spiralOrder(int[][] matrix) {
        if (matrix == null)
            return null;
        List<Integer> ans = new ArrayList<>();
        int rows = matrix.length;
        if (rows==0) return ans;
        int cols = matrix[0].length;
        int row = 0;
        List<Integer> ans1 = spiralOrderCore(matrix, 0, rows - 1, 0, cols - 1, ans);
        return ans1;
    }

    private List<Integer> spiralOrderCore(int[][] matrix, int row, int rows, int col, int cols, List<Integer> ans) {
        if (row < rows && col < cols) {
            for (int c = col; c < cols; c++) {
                ans.add(matrix[row][c]);
            }
            for (int r = row; r < rows; r++) {
                ans.add(matrix[r][cols]);
            }
            for (int i = cols; i > col; i--) {
                ans.add(matrix[rows][i]);
            }
            for (int i = rows; i > row; i--) {
                ans.add(matrix[i][col]);
            }
            spiralOrderCore(matrix, row + 1, rows - 1, col + 1, cols - 1, ans);
        } else if (row == rows) {
            for (int c = col; c <=cols; c++) {
                ans.add(matrix[row][c]);
            }

        } else if (col == cols) {
            for (int r = row; r <= rows; r++) {
                ans.add(matrix[r][col]);
            }
        }
        
        return ans;
    }

    public static void main(String[] args) {
        System.out.println("Main start");
        int[][] matrix = { { 1, 2, 3 ,4}, {  5, 6,7, 8 }, {  9,10,11,12 } ,{13,14,15,16}};
        int[][] ma={{2,3}};
        int[][] matrix1 = { { 1, 2, 3}, {4,  5, 6},{7, 8  , 9}};
        L54SpiralMatrix l54 = new L54SpiralMatrix();
        List<Integer> ans = l54.spiralOrder(ma);
        System.out.println("size:"+ans.size());
        for (int i = 0; i <ans.size(); i++) {
            System.out.println(ans.get(i));
        }

    }
}

 

posted @ 2018-02-05 16:09  于淼  阅读(135)  评论(0编辑  收藏  举报