LeetCode第54题螺旋矩阵

题目描述

给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。
LeetCode第54题螺旋矩阵_第1张图片

解题思路

1、题意理解:顺时针螺旋顺序即是从左到右,从上到下,从右到左,从下到上
2、代码逻辑:
(1)初始化矩阵的行和列,比如矩阵为3x4,即rowMin=0, rowMax=3, colMin=0, colMax=4
(2)遍历第一行,此时行不动, 列依从加1
(3)遍历最后一列,列不动,行依从加1
(4)遍历最后一行,行不动,列依从减1
(5)遍历第一列,列不动,行依从减1

代码
class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> list = new ArrayList<>();
        if(matrix == null || matrix.length == 0 || matrix[0].length == 0) return list;
        
        int rowMin = 0, rowMax = matrix.length - 1, colMin = 0,  colMax = matrix[0].length - 1;
        while(rowMin <= rowMax && colMin <= colMax){
            for(int i=colMin; i <= colMax; i++)
                list.add(matrix[rowMin][i]);
            rowMin++;

            for(int i=rowMin; i <= rowMax; i++)
                list.add(matrix[i][colMax]);
            colMax--;

            if(rowMin > rowMax || colMin > colMax) break;

            for(int i=colMax; i >= colMin; i--)
                list.add(matrix[rowMax][i]);
            rowMax--;

            for(int i=rowMax; i>= rowMin; i--)
                list.add(matrix[i][colMin]);
            colMin++;
        }
        return list;
    }
}

参考:https://leetcode.com/problems/spiral-matrix/discuss/20599/Super-Simple-and-Easy-to-Understand-Solution

你可能感兴趣的:(leetcode)