面试题29. 顺时针打印矩阵

题目描述:

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。

示例 1:

输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]

示例 2:

输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]

限制:

0 <= matrix.length <= 100
0 <= matrix[i].length <= 100

Java解法:

class Solution {
    public int[] spiralOrder(int[][] matrix) {
        if(matrix == null || matrix.length == 0 || matrix[0].length == 0){
             return new int[0];
         }
        int rows = matrix.length -1;
        int columns = matrix[0].length - 1;
        int row = 0;
        int column = 0;
        int curIndex = 0;
        //初始化一个数组用来存储输出的元素
        int[] ans = new int[(rows + 1) * (columns + 1)];
        //每次打印一圈(以第一圈为例,从matrix[0][0]开始),一圈分为四步:
        //第一步:从左到右, matrix[0][0]到matirx[0][columns]
        //第二步:从上到下, matrix[1][0]到matirx[0][rows]
        //第三步:从右向左, matrix[rows][columns - 1]到matirx[rows][0]
        //第四步:从下到上, matrix[rows - 1][0]到matirx[1][0]
        //下一圈从matrix[1][1]开始...
        //但是最后一圈可能退化为,只有一行,只有一列等,那么左后一圈可能不需要四步
        //因此我们需要判断打印每一步的前提条件
        while(column <= columns && row <= rows)
        {
            //第一步总是需要的,因为打印一圈至少需要一步
            for(int i = row; i <= columns; i++)
            {
                ans[curIndex++] = matrix[row][i];
            }
            //第二步的条件是终止行号大于起始行号
            for(int i = row + 1; i <= rows; i++)
            {
                ans[curIndex++] = matrix[i][columns];
            }
            //第三步的条件是终止列号大于起始列号
            if(row < rows && column < columns)
            {
                for(int i = columns - 1; i >= column; i--)
                {
                    ans[curIndex++] = matrix[rows][i];
                }
                for(int i = rows - 1; i >= row + 1; i--)
                {
                    ans[curIndex++] = matrix[i][column];
                }
            }
            column ++;
            row ++;
            columns --;
            rows --;
        }
        return ans;
    }
}

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/shun-shi-zhen-da-yin-ju-zhen-lcof

你可能感兴趣的:(面试题29. 顺时针打印矩阵)