专栏首页CtrlCV博客【剑指Offer】顺时针打印矩阵

【剑指Offer】顺时针打印矩阵

题目

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

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

题解

class Solution {
    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[] res = new int[(r + 1) * (b + 1)];
        while(true) {
            for(int i = l; i <= r; i++) res[x++] = matrix[t][i]; // left to right.
            if(++t > b) break;
            for(int i = t; i <= b; i++) res[x++] = matrix[i][r]; // top to bottom.
            if(l > --r) break;
            for(int i = r; i >= l; i--) res[x++] = matrix[b][i]; // right to left.
            if(t > --b) break;
            for(int i = b; i >= t; i--) res[x++] = matrix[i][l]; // bottom to top.
            if(++l > r) break;
        }
        return res;
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【剑指Offer】I. 从上到下打印二叉树

    小新哟
  • 【剑指Offer】包含min函数的栈

    定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。

    小新哟
  • 【剑指Offer】二叉搜索树的后序遍历序列

    输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。

    小新哟
  • LeetCode11|搜索二维矩阵

    编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:

    码农王同学
  • 客户端基本不用的算法系列:矩阵快速幂

    我们换一个角度来想,如果有这么一种东西,它也支持乘法和幂运算,同样也拥有像数的乘法一样的规律,是不是也可以进行快速幂的优化?

    用户2932962
  • 搜索二维矩阵Ⅱ

    一份执着✘
  • 【LeetCode】48. 旋转图像

    参考 https://blog.csdn.net/wuzhongqiang/article/details/103221743

    韩旭051
  • Java设计模式学习记录-桥接模式

    这次介绍结构型设计模式中的第二种模式,桥接模式。 使用桥接模式的目的就是为了解耦,松散的耦合更利于扩展,但是会增加相应的代码量和设计难度。

    纪莫
  • LeetCode74|有序矩阵中第K小的元素

    给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。

    码农王同学
  • 剑指offer第二天

    18.二叉树的镜像 操作给定的二叉树,将其变换为源二叉树的镜像。 ? /** public class TreeNode { int val = 0...

    郭耀华

扫码关注云+社区

领取腾讯云代金券