每日一道算法题之顺时针打印矩阵

博客详细介绍了如何按照顺时针顺序打印矩阵,提供两个示例并进行分析,通过迭代边界来实现打印。读者可以理解算法逻辑并解决相关问题。

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

题目:

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

示例 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]

分析:

遍历如图所示:遍历如图
可以用4个for循环打印,按照如上图所示打印

  1. 当打印完1,2,3,4时,上边框+1
  2. 打印4,5,6 ,右边框-1
  3. 打印 6,7,8,9 下边框 -1
  4. 由于上边框已经+1,所以只能打印 9 ,10 ,再左边框+1
边界:

当对上边框+1,右边框-1,下边框 -1,左边框+1时,如果上边框>下边框或者左边框大于右边框,则跳出while。

Demo:
    public int[] spiralOrder(int[][] matrix) {
       if(matrix.length == 0) return new int[0];
       int L=0 , R = matrix[0].length - 1 , T =0 , B = matrix.length - 1 , x=0;//上下左右边框
       int[] arrs = new int[(R+1)*(B+1)];
        while (true){
            for (int i = L ; i <= R ; i++) //遍历上边框
                arrs[x++] = matrix[T][i];
            if (++T > B) break; 
            for (int i = T ; i <= B ; i++)//遍历右边框
                arrs[x++] = matrix[i][R];
            if (--R < L) break;
            for(int i = R ; i >= L ; i--)//遍历下边框
                arrs[x++] = matrix[B][i];
            if(--B < T) break;
            for(int i = B ; i >= T ; i--)//遍历左边框
                arrs[x++] = matrix[i][L];
            if(++L > R) break;
        }
        return arrs;
    } }

ps:本人能力较差,如有问题,欢迎指出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值