螺旋矩阵

题目描述:给你一个 mn 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

示例说明请见LeetCode官网。

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/spiral-matrix/

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解法一:数组遍历

首先,用row和column分别记录matrix的行数和列数,count为matrix所有的元素数量,初始化一个数量和matrix一样的二维数组用来标记相应位置的数字是否已经遍历到,初始化result记录结果的顺序,x和y记录当前位置的索引位置,然后按照向右、向下、向左、向右的顺序开始处理二维数组:

  • 向右:将y往右移动一位,判断是否超过column的界限并且移动后的位置是否没有遍历过,如果符合条件,则将移动后的位置的值放入result中,并且将count减一,并且将该位置的标记位置为true,直到往右移不动为止;
  • 向下:将x往下移动一位,判断是否超过row的界限并且移动后的位置是否没有遍历过,如果符合条件,则将移动后的位置的值放入result中,并且将count减一,并且将该位置的标记位置为true,直到往下移不动为止;
  • 往左:将y往左移动一位,判断是否不小于0并且移动后的位置是否没有遍历过,如果符合条件,则将移动后的位置的值放入result中,并且将count减一,并且将该位置的标记位置为true,直到往左移不动为止;
  • 往上:将上往左移动一位,判断是否不小于0并且移动后的位置是否没有遍历过,如果符合条件,则将移动后的位置的值放入result中,并且将count减一,并且将该位置的标记位置为true,直到往上移不动为止。

重复上面的过程,知道count为0即所有的数字都遍历到为止,返回result。

import java.util.ArrayList;
import java.util.List; public class LeetCode_054 {
public static List<Integer> spiralOrder(int[][] matrix) {
int row = matrix.length, column = matrix[0].length, count = row * column, x = 0, y = -1;
boolean[][] flag = new boolean[row][column];
List<Integer> result = new ArrayList<>();
while (count > 0) {
// 向右
while (y + 1 < column && !flag[x][y + 1]) {
y = y + 1;
result.add(matrix[x][y]);
flag[x][y] = true;
count--;
} // 向下
while (x + 1 < row && !flag[x + 1][y]) {
x = x + 1;
result.add(matrix[x][y]);
flag[x][y] = true;
count--;
} // 向左
while (y - 1 >= 0 && !flag[x][y - 1]) {
y = y - 1;
result.add(matrix[x][y]);
flag[x][y] = true;
count--;
} // 向上
while (x - 1 >= 0 && !flag[x - 1][y]) {
x = x - 1;
result.add(matrix[x][y]);
flag[x][y] = true;
count--;
}
}
return result;
} public static void main(String[] args) {
int[][] matrix = new int[][]{{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
for (Integer integer : spiralOrder(matrix)) {
System.out.print(integer + " ");
}
}
}

【每日寄语】 愿你今天温柔,优秀,可爱,果断,一尘不染。

LeetCode-054-螺旋矩阵的更多相关文章

  1. LeetCode:螺旋矩阵||【59】

    LeetCode:螺旋矩阵||[59] 题目描述 给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵. 示例: 输入: 3 输出: [ [ 1, 2, 3 ...

  2. LeetCode:螺旋矩阵【54】

    LeetCode:螺旋矩阵[54] 题目描述 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 示例 1: 输入: [ [ 1, 2, 3 ], ...

  3. LeetCode之螺旋矩阵

    问题 螺旋矩阵 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 示例 1: 输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ ...

  4. LeetCode 59. 螺旋矩阵 II(Spiral Matrix II)

    题目描述 给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵. 示例: 输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7 ...

  5. Java实现 LeetCode 59 螺旋矩阵 II

    59. 螺旋矩阵 II 给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵. 示例: 输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ...

  6. Java实现 LeetCode 54 螺旋矩阵

    54. 螺旋矩阵 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 示例 1: 输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], ...

  7. leetcode 54. 螺旋矩阵 及 59. 螺旋矩阵 II

    54. 螺旋矩阵 问题描述 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 示例 1: 输入: [ [ 1, 2, 3 ], [ 4, 5, ...

  8. [Leetcode]59.螺旋矩阵Ⅱ

    给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵. 示例: 输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, ...

  9. LeetCode 54. 螺旋矩阵(Spiral Matrix) 剑指offer-顺时针打印矩阵

    题目描述 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 示例 1: 输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, ...

  10. LeetCode 59. Spiral Matrix II (螺旋矩阵之二)

    Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order. For ...

随机推荐

  1. HowToDoInJava 其它教程 1 &#183; 翻译完成

    原文:HowToDoInJava 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远. ApacheCN 学习资源 目录 Maven 教程 如何在 ...

  2. java命令- (学习)jps

    jps(Java Virtual Machine Process Status Tool) 是java提供的一个显示当前所有java进程pid的命令,适合在linux/unix平台上简单察看当前jav ...

  3. Web标准和骨架

    Web 标准的好处 1.让Web的发展前景更广阔 2.内容能被更广泛的设备访问 3.更容易被搜寻引擎搜索 4.降低网站流量费用 5.使网站更易于维护 6.提高页面浏览速度 Web 标准构成 Web标准 ...

  4. JSP、Servlet和Spring MVC

    感谢原博主!!!https://blog.csdn.net/whut2010hj/article/details/80874008 版权声明:本文为博主原创文章,遵循CC 4.0 BY版权协议,转载请 ...

  5. Python—常用语句 if for while

    Python-常用语句 判断语句 循环语句 break语句和continue语句 判断语句: if语句是最简单的添加判断语句,它可以控制程序的执行流程. if结构: if条件: 要执行的操作 ... ...

  6. VLAN大战三层交换机 以及无敌的Hybrid

    VLAN与三层交换机 1.VLAN的概念与优势 2.VLAN的种类 3.静态VLAN的配置 4.Trunk介绍and配置 5.三层交换机原理 6.hybrid 1.当某个网络设备出现 故障后,就会不停 ...

  7. P1015 [NOIP1999 普及组] 回文数

    点击查看题目 题目描述 若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数. 例如:给定一个十进制数 5656,将 5656 加 6565(即把 5656 从右向左读),得到 ...

  8. JDK线程池

    简介 多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力,但频繁的创建线程的开销是很大的,那么如何来减少这部分的开销了,那么就要考虑使用线程 ...

  9. find+grep+正则表达式

    目录 find+grep+正则表达式 1.find 2.grep 3.正则表达式 find+grep+正则表达式 1.find 根据文件的名称或者属性查找文件. # 自己在 /root/adc目录下长 ...

  10. linux中可以查看端口占用的方法

    在自己搭建的服务器中,经常容易出现端口被占用的问题,那么怎么知道自己的端口是否被占用了呢? 可以使用下面的方法: linux中可以查看端口占用的方法. netstat -ant | grep 80 ( ...