【LeetCode每日一题】剑指 Offer 29. 顺时针打印矩阵(持续更新)

简介: 【LeetCode每日一题】剑指 Offer 29. 顺时针打印矩阵(持续更新)

今日题目(剑指Offer系列)

剑指 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]

解题思路:

>该题的意思就是将数组螺旋打印
>Java解法就是设立四个边界,然后根据四个边界定四个循环
>直到边界相等,说明所有元素已全部打印完成
>Python解法就会很简单
>Python有切片功能,可以很容易切出第一行的元素
>所以想法就是切出第一行的元素,然后将矩阵逆转90度
>不断循环该过程
>将矩阵逆转90度可以使用list(zip(*matrix))[::-1]

Python解法:

class Solution:
    def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
        res=[]
        while matrix:
            res+=matrix.pop(0)
            matrix=list(zip(*matrix))[::-1]
        return res

Java解法:

if (matrix.length == 0) {
      return new int[] {};
    }
    int left = 0;
    int right = matrix[0].length;
    int up = 0;
    int down = matrix.length;
    int[] res = new int[matrix[0].length * matrix.length];
    int k = 0;
    while (true) {
      for (int i = left; i < right; i++) {
        res[k++] = matrix[up][i];
      }
      if (++up >= down)
        break;
      for (int i = up; i < down; i++) {
        res[k++] = matrix[i][right - 1];
      }
      if (--right <= left)
        break;
      for (int i = right - 1; i >= left; i--) {
        res[k++] = matrix[down - 1][i];
      }
      if (--down <= up)
        break;
      for (int i = down - 1; i >= up; i--) {
        res[k++] = matrix[i][left];
      }
      if (++left >= right)
        break;
    }
    return res;


目录
相关文章
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
194 6
|
存储 算法 NoSQL
LeetCode第73题矩阵置零
文章介绍了LeetCode第73题"矩阵置零"的解法,通过使用矩阵的第一行和第一列作为标记来记录哪些行或列需要置零,从而在不增加额外空间的情况下解决问题。
LeetCode第73题矩阵置零
|
10月前
|
算法 Go
【LeetCode 热题100】73:矩阵置零(详细解析)(Go语言版)
这篇文章详细解析了力扣热题 73——矩阵置零问题,提供两种解法:一是使用额外标记数组,时间复杂度为 O(m * n),空间复杂度为 O(m + n);二是优化后的原地标记方法,利用矩阵的第一行和第一列记录需要置零的信息,将空间复杂度降低到 O(1)。文章通过清晰的代码示例与复杂度分析,帮助理解“原地操作”及空间优化技巧,并推荐相关练习题以巩固矩阵操作能力。适合刷题提升算法思维!
331 9
|
算法 Java
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
207 6
|
算法 C++
Leetcode第59题(螺旋矩阵2)
这篇文章介绍了解决LeetCode第59题“螺旋矩阵II”的算法,通过C++编程实现按顺时针顺序填充一个n x n的正方形矩阵。
191 0
|
Python
【Leetcode刷题Python】剑指 Offer 30. 包含min函数的栈
本文提供了实现一个包含min函数的栈的Python代码,确保min、push和pop操作的时间复杂度为O(1)。
184 4
|
算法 Python
【Leetcode刷题Python】剑指 Offer 33. 二叉搜索树的后序遍历序列
本文提供了一种Python算法,用以判断给定整数数组是否为某二叉搜索树的后序遍历结果,通过识别根节点并递归验证左右子树的值是否满足二叉搜索树的性质。
152 3
|
Python
【Leetcode刷题Python】剑指 Offer 32 - II. 从上到下打印二叉树 II
本文提供了一种Python实现方法,用于层次遍历二叉树并按层打印结果,每层节点按从左到右的顺序排列,每层打印到一行。
175 3
|
Python
【Leetcode刷题Python】剑指 Offer 32 - I. 从上到下打印二叉树
本文介绍了使用Python实现从上到下打印二叉树的解决方案,采用层次遍历的方法,利用队列进行节点的访问。
147 2
|
算法 Python
【Leetcode刷题Python】73. 矩阵置零
本文介绍了LeetCode第73题的解法,题目要求在给定矩阵中将所有值为0的元素所在的行和列全部置为0,并提供了一种原地算法的Python实现。
308 0
【Leetcode刷题Python】73. 矩阵置零