matriz 54. Spiral
Dada una matriz de elementos de mxn (m fila, n-columna), seguir un orden en sentido horario helicoidal, declaraciones de todos los elementos en la matriz.
Ejemplo 1:
Entrada:
[
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
de salida: [1,2,3,6,9,8,7,4,5 ]
Fuente: estancia botón (LeetCode)
enlace: https: //leetcode-cn.com/problems/spiral-matrix
con derechos de autor por deducción de todas las redes. reimpresión comercial póngase en contacto con la reimpresión autorizada oficial, no comercial por favor indique la fuente.
Método: traversal analógica, que atraviesa a la derecha, abajo traversal, transversal a la izquierda, ir hasta el, o cada línea después de un recorrido se mueve a la siguiente fila o la columna siguiente, cuando el tamaño de la nueva matriz es igual al tamaño de la matriz original, fuera del bucle, Volver a los resultados
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
if(matrix==null||matrix.length==0)
{
return new ArrayList<>();
}
int minX=0;
int maxX=matrix.length-1;
int minY=0;
int maxY=matrix[0].length-1;
ArrayList<Integer> res=new ArrayList<>();
int size=matrix.length*matrix[0].length;
while(minX<=maxX&&minY<=maxY)
{
//向右遍历,x不变,y增大
for(int y=minY;y<=maxY;y++)
{
res.add(matrix[minX][y]);
}
if(res.size()==size)
{
break;
}
minX++;
//向下遍历,y不变,x增大
for(int x=minX;x<=maxX;x++)
{
res.add(matrix[x][maxY]);
}
if(res.size()==size)
{
break;
}
maxY--;
//向左遍历,x不变,y减小
for(int y=maxY;y>=minY;y--)
{
res.add(matrix[maxX][y]);
}
if(res.size()==size)
{
break;
}
maxX--;
//向上遍历,y不变,x减小
for(int x=maxX;x>=minX;x--)
{
res.add(matrix[x][minY]);
}
if(res.size()==size)
{
break;
}
minY++;
}
return res;
}
}