Leetcode (59) --- Matriz en espiral ||

Directorio de artículos

tema

59. Matriz espiral II

Darle un entero positivo n para generar una matriz de matriz cuadrada nxn que contenga todos los elementos de 1 a n2, y los elementos están dispuestos en espiral en el sentido de las agujas del reloj.

Ejemplo 1:

Inserte la descripción de la imagen aquí

输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]

Ejemplo 2:

输入:n = 1
输出:[[1]]

inmediato:

1 <= n <= 20

Solución de problemas (Java)

class Solution {
    
    
    public int[][] generateMatrix(int n) 
    {
    
    
        //行坐标
        int i = 0;
        //列坐标
        int j = 0;
        //数目
        int count = 0;
        //结果矩阵
        int[][] result = new int[n][n];
        int row = n;
        while(true)
        {
    
    
            //填充从左到右的行
            for(int index = 0;index < row;index++)
            {
    
    
                //最后一个数,只加行,不加列
                if(index == row - 1)
                {
    
    
                    result[i++][j] = ++count;
                }
                else
                {
    
    
                    result[i][j++] = ++count;
                }
            }
            //判断是否已经结束
            if(count == n*n)
            {
    
    
                break;
            }
            row--;
            //填充从上到下的行
            for(int index = 0;index < row;index++)
            {
    
    
                //最后一个数,只减列,不加行
                if(index == row - 1)
                {
    
    
                    result[i][j--] = ++count;
                }
                else
                {
    
    
                    result[i++][j] = ++count;
                }
            }
            //判断是否已经结束
            if(count == n*n)
            {
    
    
                break;
            }
            //填充从右到左的行
            for(int index = 0;index < row;index++)
            {
    
    
                //最后一个数,只减行,不减列
                if(index == row - 1)
                {
    
    
                    result[i--][j] = ++count;
                }
                else
                {
    
    
                    result[i][j--] = ++count;
                }
            }
            row--;
            //判断是否已经结束
            if(count == n*n)
            {
    
    
                break;
            }
            //填充从下到上的行
            for(int index = 0;index < row;index++)
            {
    
    
                //最后一个数,只加列,不减行
                if(index == row - 1)
                {
    
    
                    result[i][j++] = ++count;
                }
                else
                {
    
    
                    result[i--][j] = ++count;
                }
            }
             //判断是否已经结束
            if(count == n*n)
            {
    
    
                break;
            }
        }
        return result;
    }
}

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_46841376/article/details/114871988
Recomendado
Clasificación