matrixReshape- remodelar matriz

Título

En MATLAB, hay una función de remodelación muy útil, que puede remodelar una matriz en otra matriz nueva con un tamaño diferente, pero conservar sus datos originales.

Dada una matriz representada por una matriz bidimensional y dos enteros positivos r y c, que representan el número de filas y columnas de la matriz reconstruida deseada, respectivamente.

La matriz reconstruida necesita llenar todos los elementos de la matriz original en el mismo orden transversal de fila.

Si la operación de remodelación con los parámetros dados es factible y razonable, se genera la nueva matriz de remodelación; de lo contrario, se genera la matriz original.

Ejemplo 1:

Entrada:
nums =
[[1,2],
[3,4]]
r = 1, c = 4
Salida:
[[1,2,3,4]]
Explicación:
El resultado de los números de recorrido de fila es [1,2 , 3, 4]. La nueva matriz es una matriz de 1 * 4, llene la nueva matriz línea por línea con los valores de los elementos anteriores.

Ejemplo 2:

Entrada:
nums =
[[1,2],
[3,4]]
r = 2, c = 4
Salida:
[[1,2],
[3,4]]
Explicación:
No hay forma de convertir un 2 * Matriz 2 en matriz 2 * 4. Así que genere la matriz original.

Nota:

El ancho y el alto de una matriz dada están en el rango de [1, 100].
Los dados r y c son ambos números positivos.

Ideas para resolver problemas

Esta pregunta es una pregunta simple, algunas ideas se incluyen en el código y el código contiene una descripción de texto.

Demostración de código

class Solution {
    
    
    public int[][] matrixReshape(int[][] nums, int r, int c) {
    
    
            int han=nums.length;
            int lie=nums[0].length;
            //不满足条件,不可以reshape的情况
            if(han*lie!=r*c)
                return nums;
            //重新定义一个二维数组,用于存放reshape的值
            int[][] reshape=new int[r][c];
            //定义两个变量,rr代表reshape中的行,rc代表reshape中的列,初始值都是0
            int rr=0,rc=0;
            //双重循环,从nums中取数
            for (int i=0;i<han;i++)
            {
    
    
                for (int j=0;j<lie;j++)
                {
    
    
                    //将nums中的数取出来,按照要求放入到reshape中
                    reshape[rr][rc]=nums[i][j];
                    //以行的方式存储,reshape当前行右移
                    rc++;
                    //当一行满的时候,列向下移,当前行的指针重新归0
                    if(rc==c)
                    {
    
    
                        rr++;
                        rc=0;
                    }
                }
            }

            return reshape;
    }
}

efecto

La
respuesta de información fue exitosa:
tiempo de ejecución: 1 ms, derrotando al 100,00% de los usuarios de Java
Consumo de memoria: 39,7 MB, derrotando al 25,85% de los usuarios de Java

Supongo que te gusta

Origin blog.csdn.net/tangshuai96/article/details/113832105
Recomendado
Clasificación