目录
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
示例 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]
提示:
int len2=a[i].length. //表示一共有多少列(行长度)

- class Solution {
- public List
spiralOrder(int[][] matrix) { - List
list = new ArrayList(); - // int len1=a.length; //表示一共有多少行(列长度)
- // int len2=a[i].length.//表示一共有多少列(行长度)
- if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
- return list;
- }
-
- // 行数,也就是列的长度
- int m = matrix.length;
- // 列数,也就是行的长度
- int n = matrix[0].length;
- // 记录层数,这个这层数与每次循环的次数、起始位置直接相关
- int i = 0;
-
- //统计矩阵从外向内的层数,如果矩阵非空,那么它的层数至少为1层,向上取整
- int count = (Math.min(m, n) + 1) / 2;
- // 从外部向内部遍历,逐层打印数据
- // 不可以是左闭右开!因为如果全都是左闭右开的时候,
- // 当存在奇数行或奇数列(或同时存在)的时候会直接因为开区间而被忽略
- // 所以这里在检测的时候必须保证右是闭的!
-
- while (i < count) {
- // 上侧,从左到右,行不变,列变,变化长度是列数,也就是行长度,左闭右闭
- for (int j = i; j <= n - i - 1; j++) {
- list.add(matrix[i][j]);
- }
- // 右侧,从上到下,列不变,行变,变化长度是行数,也就是列长度,左闭右闭
- for (int j = i + 1; j <= m - i - 1; j++) {
- list.add(matrix[j][(n - 1) - i]);
- }
-
- // 下侧,从右到左,行不变,列变,变到起始列停止,左右全开
- for (int j = (n - 1) - (i + 1); j >= i && (m - 1 - i != i); j--) {
- list.add(matrix[(m - 1) - i][j]);
- }
- // 左侧,从下到上,列不变,行变,变到起始行停止,左右全开
- for (int j = (m - 1) - (i + 1); j >= i + 1 && (n - 1 - i) != i; j--) {
- list.add(matrix[j][i]);
- }
- i++;
- }
- return list;
- }
- }
同理,只不过换成了正方形
- class Solution {
- public int[][] generateMatrix(int n) {
- int matrix[][] = new int[n][n];
- if(n==0)return matrix;
-
- int i=0;
- int index =1;
- int count = (n+1)/2;
- while(i
- // 上侧,从左到右,行不变,列变,变化长度是列数,也就是行长度,左闭右闭
- for (int j = i; j <= n - i - 1; j++) {
- matrix[i][j] = index++;
- }
- // 右侧,从上到下,列不变,行变,变化长度是行数,也就是列长度,左闭右闭
- for (int j = i + 1; j <= n - i - 1; j++) {
- matrix[j][(n - 1) - i] = index++;
- }
-
- // 下侧,从右到左,行不变,列变,变到起始列停止,左右全开
- for (int j = (n - 1) - (i + 1); j >= i && (n - 1 - i != i); j--) {
- matrix[(n - 1) - i][j] = index++;
- }
- // 左侧,从下到上,列不变,行变,变到起始行停止,左右全开
- for (int j = (n - 1) - (i + 1); j >= i + 1 && (n - 1 - i) != i; j--) {
- matrix[j][i] = index++;
- }
- i++;
- }
- return matrix;
- }
- }