顺时针打印矩阵&螺旋矩阵
问题陈述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
示例 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]
思路分析
空值处理:当matrix为空时,直接返回空列表。
初始化:左右上下四个边界l,r,t,b。
循环打印:
代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| public class Cirlcle_printMatrix { 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]; if(++t > b) break; for(int i = t; i <= b; i++) res[x++] = matrix[i][r]; if(l > --r) break; for(int i = r; i >= l; i--) res[x++] = matrix[b][i]; if(t > --b) break; for(int i = b; i >= t; i--) res[x++] = matrix[i][l]; if(++l > r) break; } return res; } }
|
螺旋矩阵
给定一个正整数 n,生成一个包含 1 到 n^2所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
1 2 3 4 5 6 7
| 输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]
|
代码实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| class Solution { public int[][] generateMatrix(int n) { int t=0,b=n-1,l=0,r=n-1,num=0; int tar=n*n; int[][] mat=new int[n][n]; while(num<=tar){ for(int i=l;i<=r;i++) mat[t][i]=++num; if(++t>b) break; for(int i=t;i<=b;i++) mat[i][r]=++num; if(--r<l) break; for(int i=r;i>=l;i--) mat[b][i]=++num; if(--b<t) break; for(int i=b;i>=t;i--) mat[i][l]=++num; if(++l>r) break; } return mat;
} }
|