剑指offer29. 顺时针打印矩阵

该篇博客详细介绍了如何实现顺时针打印矩阵的算法,通过设定边界条件并依次遍历矩阵的四个边界,逐步打印出所有数字。示例中给出了一种具体的Java代码实现,适用于4X4矩阵,并给出了一个2X2矩阵的输入和输出示例。

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

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵:
[[1,2,3,4],
[5,6,7,8],
[9,10,11,12],
[13,14,15,16]]
则依次打印出数字
[1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10]

示例1
输入:
[[1,2],[3,4]]
返回值:
[1,2,4,3]

思路:设定边界条件,依次遍历整个矩阵即可。设置上下左右四个边界,初始边界值为两个0和长宽最大值。然后按顺序每次遍历一整行或一整列,遍历结束以后更新对应的边界值,每次循环进行四次遍历。循环终止条件则设置为出现边界值的大小相反时,因为当边界值相等时,仍有未被遍历的数存在。

代码:

public ArrayList<Integer> printMatrix(int [][] matrix) {
        int m = matrix.length;
        int n = matrix[0].length;
        int x1,x2,y1,y2;
        x1 = 0;
        x2 = n - 1;
        y1 = 0;
        y2 = m - 1;
        ArrayList<Integer> ans = new ArrayList<>();
        while(true)
        {
            for(int i = x1;i <= x2;i++)
            {
                ans.add(matrix[y1][i]);
            }
            y1++;
            if(y1 > y2) break;
            for(int i = y1;i <= y2;i++)
            {
                ans.add(matrix[i][x2]);
            }
            x2--;
            if(x1 > x2) break;
            for(int i = x2;i >= x1;i--)
            {
                ans.add(matrix[y2][i]);
            }
            y2--;
            if(y1 > y2) break;
            for(int i = y2;i >= y1;i--)
            {
                ans.add(matrix[i][x1]);
            }
            x1++;
            if(x1 > x2) break;
        }
        return ans;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值