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

tag: 摩根斯丹利 技术研发部 笔试原题

思路: 看到矩阵型题目,首先想到的是坐标转换, 找到坐标转换规律。

          本题 按照一圈圈思路从外到内逐步遍历。 边界容易出错。

上右下左:

matrix[x][y + i]
matrix[x + j][y + cols - 1]
matrix[x + rows - 1][y + i]
matrix[x + i ][y]


public class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> result = new ArrayList<Integer>();
        if(matrix == null || matrix.length == 0) {
            return result;
        }
        int rows = matrix.length;
        int cols = matrix[0].length;
        int x = 0;
        int y = 0;
        visitSpiral(matrix, x, y, rows, cols, result);
        return result;
    }
    
    public void visitSpiral(int[][] matrix, int x, int y, int rows, int cols, List<Integer> result) {
        if(rows <= 0 || cols <= 0) {
            return;
        }
        
        // first line
        for(int i = 0; i < cols; i++) {
            result.add(matrix[x][y + i]);
        }
        
        // right column
        for(int j = 1; j < rows - 1; j++) {
            result.add(matrix[x + j][y + cols - 1]);
        }
        
        if(rows > 1) {
            for(int i = cols - 1; i >= 0; i--) {
                result.add(matrix[x + rows - 1][y + i]);
            }
        }
        
        if(cols > 1) {
            for(int i = rows - 2; i > 0; i--) {
                result.add(matrix[x + i ][y]);
            }
        }
        
     
        visitSpiral(matrix,x + 1, y + 1, rows - 2, cols - 2,result);
    }
    
    
    
}

  

原文地址:https://www.cnblogs.com/superzhaochao/p/6473485.html