59 Matriz espiral II (analógica)

1. Descripción del problema:

Dado un número entero positivo n, genera una matriz cuadrada que contiene todos los elementos de 1 a n2, y los elementos están dispuestos en espiral en el sentido de las agujas del reloj.

Ejemplo:

Entrada: 3
Salida:
[
 [1, 2, 3],
 [8, 9, 4],
 [7, 6, 5]
]

Fuente:
enlace de LeetCode : https://leetcode-cn.com/problems/spiral-matrix-ii

2. Análisis de pensamiento:

① De hecho, el tema es relativamente fácil de entender. Podemos simular el proceso de generación de todo el elemento de matriz de acuerdo con nuestro pensamiento habitual. Podemos saber que se generó a la derecha al principio, el segundo es generar elementos a continuación, y el tercero Genere elementos a la izquierda, y el cuarto es generar elementos hacia arriba, por lo que puede usar cuatro bucles while para generar un borde correspondiente a un cuadro. Puede encontrar que la condición que puede generar el elemento de matriz actual es que el elemento actual es cero, lo que indica que no hay Se llena y la posición actual no excede el límite de la matriz, por lo que la condición de los cuatro bucles while es que la posición actual no excede el límite de la matriz y el elemento de matriz actual es cero. Después de llenar un cuadro, lo mismo es cierto para el segundo relleno, La capa más externa se puede establecer con un bucle while. Cuando no se ha generado el número de elementos, se puede ejecutar el bucle más externo. Cuando finaliza el bucle, se han generado todos los elementos.

② Todo el proceso es relativamente fácil de entender. Juzgar el límite y las condiciones correspondientes se pueden completar. El código general no es difícil. También escribí mi propia solución en el botón del collar

3. El código es el siguiente

import java.util.Scanner;
public class Solution {
    public int[][] generateMatrix(int n) {
        if (n == 0) return null;
        int arr[][] = new int[n][n];
        int count = 2;
        int x = 0, y = 0;
        arr[0][0] = 1;
        while (count <= n * n){
            while (y + 1 < n && arr[x][y + 1] == 0){
                arr[x][y + 1] = count++;
                ++y;
            }
            while (x + 1 < n && arr[x + 1][y] == 0){
                arr[x + 1][y] = count++;
                ++x;
            }
            while (y - 1 >= 0 && arr[x][y - 1] == 0){
                arr[x][y - 1] = count++;
                --y;
            }
            while (x - 1 >= 0 && arr[x - 1][y] == 0){
                arr[x - 1][y] = count++;
                --x;
            }
        }
        return arr;
    }
}

 

569 artículos originales publicados · Me gusta 153 · Visitas 590,000+

Supongo que te gusta

Origin blog.csdn.net/qq_39445165/article/details/105313837
Recomendado
Clasificación