螺旋矩阵

题目描述:给你一个 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. 人工智能与智能系统2-> 机器人学2 | 时间与运动

    <Robotics, Vision and Control>学习到第三章,我才发现这本书是有配套视频的,第二章看的好辛苦,很多地方生硬理解了一下,现在打算把视频再好好看一看,作为补充,也会 ...

  2. react组件中的类调用construcor、super方法你知道多少?

    constructor:在类中作为一个钩子函数,有constructor钩子函数的时候,可以定义state,如果用户不定义state的话,有无constructor钩子函数没啥区别: super:

  3. 使用 Frp 和 Docker 通过远程桌面和 SSH 来远程控制 Windows(反向代理)

    最新博客文章链接 大体思路 使用 Docker 容器,在云服务器上部署 Frps 容器来中转流量,在被控制的 Windows 上部署 Frpc 容器来暴露内网的服务,在主控制端的 Windows 上直 ...

  4. SpringBoot+MyBatis通过ScriptRunner读取SQL文件

    @Component public class InitDBTables implements CommandLineRunner { @Autowired DataSource dataSource ...

  5. C语言中的单引号和双引号的区别

    首先肯定地说,二者是有区别的,不是说用谁都一样. 1.实质区别,代表的含义不同 'A'代表的是一个整数,而且这个整数对应的是编译器所采用的字符集中的字符序列对应的数值.所以'A'跟ASCII中的65意 ...

  6. FastJSON解析Json字符串(反序列化为List、Map)

    在日常开发与数据库打交道的时候,常有以Json格式的字符串存储到数据库的情况,当在Java程序中获取到对应的Json格式的String字符串后,如何才能转换为我们想要的数据格式(比如转换成Java中的 ...

  7. 一加6刷入kali nethunter

    Installing Kali NetHunter On the OnePlus 6 准备工具: adb: https://jingyan.baidu.com/article/22fe7cedf67e ...

  8. Docker入门的亿点点学习

    前段时间花了些时间学习了亿点点docker,也算是入门了吧,顺便记了一下笔记拿出来分享给想要接触docker的兄弟们. 没有服务器的兄嘚可以去腾讯云或者阿里云领取免费的试用产品嗷,如果已经领取过了,又 ...

  9. 小程序"errcode":41002错误问题如何解决?

    我的问题是:小程序在本地测试的时候是没有问题的,但是当我扫开发者中的项目中的二维码手机浏览测试的时候发现是没有数据的,然后调试工具中出现: {"errcode":41002,&qu ...

  10. opencv笔记--SURF

    SURF(Speeded-Up Robust Features) 是对 SIFT 得改进,相对于 SIFT,SURF 利用积分图像与盒函数模拟 DoG,提升了计算速度:同时,使用了一种不用于 SIFT ...