LeetCode刷题034 顺时针打印矩阵

该文章提供了一个Java代码实现,用于按顺时针方向打印矩阵中的元素。代码包括一个主方法spiralOrder和辅助方法printMatrix,递归地处理不同大小的矩阵,特别考虑了边界条件如1x1、1xn和nx1的矩阵。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

剑指 Offer 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
题解

注意判断1 × 1、1 × n 、n × 1 的矩阵

Code
class Solution {
    public int[] spiralOrder(int[][] matrix) {
        ArrayList<Integer> list = new ArrayList<>();
        if(matrix == null || matrix.length == 0 || matrix[0].length == 0)
            return new int[0];
        printMatrix(matrix, list, 0, matrix.length - 1, 0, matrix[0].length - 1);
        int[] result = new int[list.size()];
        int index = 0;
        for(Integer i : list)
            result[index++] = i;
        return result;
    }

    public static void printMatrix(int[][] matrix, ArrayList<Integer> list,
                                         int rowBg, int rowEd, int colBg, int colEd){
        if(rowBg > rowEd || colBg > colEd){
            return;
        }
        for(int i = colBg; i <= colEd; i++)
            list.add(matrix[rowBg][i]);
        for(int i = rowBg + 1; i <= rowEd; i++)
            list.add(matrix[i][colEd]);
        if(rowBg != rowEd){
            for(int i = colEd - 1; i >= colBg; i--)
                list.add(matrix[rowEd][i]);
        }
        if(colBg != colEd){
            for(int i = rowEd - 1; i > rowBg; i--)
                list.add(matrix[i][colBg]);
        }
        printMatrix(matrix, list, ++rowBg, --rowEd, ++colBg, --colEd);
    } 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值