matriz LeetCode 54. espiral (Java)

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;
    }
}
Publicado 88 artículos originales · ganado elogios 0 · Vistas 2152

Supongo que te gusta

Origin blog.csdn.net/nuts_and_bolts/article/details/105102764
Recomendado
Clasificación