LeetCode

题目:

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

思路:

总是从[i, i]这个点出发开始绕圈,注意去重

package array;

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

public class SpiralMatrix {

    public List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> res = new ArrayList<Integer>();
        int m = 0;
        int n  =0;
        if (matrix == null || (m = matrix.length) == 0 || (n = matrix[0].length) == 0) return res;
        int diagonal = (m - m / 2) < (n - n / 2) ? (m - m / 2) : (n - n / 2);
        for (int i = 0; i < diagonal; ++i) {
            scan(res, matrix, i, m, n);
        }
        
        return res;
    }
    
    private void scan(List<Integer> res, int[][] matrix, int i, int m, int n) {
        for (int x = i; x < n - i; ++x) {
            res.add(matrix[i][x]);
        }
        
        for (int x = i + 1; x < m - i; ++x) {
            res.add(matrix[x][n - i - 1]);
        }
        
        if (i != m - i - 1) {
            for (int x = n - i - 2; x >= i; --x) {
                res.add(matrix[m - i - 1][x]);
            }
        }
        
        if (i != n - i - 1) {
            for (int x = m - i - 2; x > i; --x) {
                res.add(matrix[x][i]);
            }
        }
    }
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        // int[][] matrix = {{1},{2},{3},{4},{5},{6},{7},{8},{9},{10}};
        int[][] matrix = {{ 1,2,3,4,5,6,7,8,9,10 }};
        for(int i : (new SpiralMatrix()).spiralOrder(matrix)){
            System.out.println(i);
        }
    }

}
原文地址:https://www.cnblogs.com/null00/p/5079556.html