54. Spiral Matrix

一、题目

  1、审题

  2、分析:

    给出一个 mXn 的二维数组,旋转着输出数组元素。

二、解答

  1、思路:

    从左向右、右向左时要判断列越界问题;

    从上向下、下向上要判断行越界问题;

    

public List<Integer> spiralOrder(int[][] matrix) {
        
        List<Integer> resultList = new ArrayList<>();
         
        if(matrix.length == 0)
            return resultList;
        
        int rowBegin = 0;
        int rowEnd = matrix.length - 1;
        int colBegin = 0;
        int colEnd = matrix[0].length - 1;
        
        while(rowBegin <= rowEnd && colBegin <= colEnd) {
            
            // traverse Right --------->
            for(int j = colBegin; j <= colEnd; j++) 
                resultList.add(matrix[rowBegin][j]);
            
            rowBegin++;
            
            // traverse Down      |
            //                      V
            for(int j = rowBegin; j <= rowEnd; j++)
                resultList.add(matrix[j][colEnd]);
            colEnd--;
            
            
            // traverse left  <----------------
            if(rowBegin <= rowEnd) {
                for(int j = colEnd; j >= colBegin; j--)
                    resultList.add(matrix[rowEnd][j]);
            }
            rowEnd--;
            
            // traverse up      ^
            //                    |
            if(colBegin <= colEnd){
                for(int j = rowEnd; j >= rowBegin; j--)
                    resultList.add(matrix[j][colBegin]);
            }
            colBegin++;
        }
        return resultList;
    }
原文地址:https://www.cnblogs.com/skillking/p/9651688.html