isToeplitzMatrix-Matriz de Toeplitz

Título

Darle una matriz de mxn. Si esta matriz es una matriz de Toplitz, devuelve verdadero; de lo contrario, devuelve falso.

Si los elementos de cada diagonal desde la parte superior izquierda a la inferior derecha de la matriz son iguales, entonces la matriz es una matriz de Toplitz.

Ejemplo 1:

Entrada: matriz = [[1,2,3,4], [5,1,2,3], [9,5,1,2]]
Salida: verdadera
Explicación:
En la matriz anterior, su diagonal es:
" [9] "," [5, 5] "," [1, 1, 1] "," [2, 2, 2] "," [3, 3] "," [4] ".
Todos los elementos de cada diagonal son iguales, por lo que la respuesta es Verdadero.

Ejemplo 2:

Entrada: matriz = [[1,2], [2,2]]
Salida: falso
Explicación:
Los elementos de la diagonal "[1, 2]" son diferentes.

inmediato:

m == matriz.longitud
n == matriz [i] .longitud
1 <= m, n <= 20
0 <= matriz [i] [j] <= 99

Ideas para resolver problemas

Aquí dividimos la pregunta en dos partes de acuerdo con el significado de la pregunta, una es el triángulo inferior (dividido por 45 ° de cada fila hacia la parte inferior derecha), la
segunda parte y el triángulo superior (cada columna está dividida por 45 ° hacia la parte inferior derecha, excluyendo la primera columna)
Estas dos partes del juicio son básicamente las mismas. Tome el siguiente triángulo como ejemplo
. El juicio de coordenadas de la matriz, la esquina inferior derecha se compara con la esquina superior izquierda, es decir , la abscisa más uno, la ordenada más un
punto en la fila actual y el punto en cada fila subsiguiente si hay una diferencia, luego devuelve directamente falso
si es el mismo, a la siguiente línea, repitiendo el paso anterior.

Demostración de código

class Solution {
    
    
    public boolean isToeplitzMatrix(int[][] matrix) {
    
    
        int m=matrix.length;
        int n=matrix[0].length;
          for(int i=0;i<m;i++)
          {
    
    
              int han=i+1;
              int lie=1;
              while (han<m&&lie<n)
              {
    
    
                  if(matrix[han][lie]!=matrix[han-1][lie-1])
                      return false;
                  han++;
                  lie++;
              }
          }
        for(int i=1;i<n;i++)
        {
    
    
            int lie=i+1;
            int han=1;
            while (han<m&&lie<n)
            {
    
    
                if(matrix[han][lie]!=matrix[han-1][lie-1])
                    return false;
                han++;
                lie++;
            }
        }
          return true;
    }
}

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: 38,8 MB, derrotando al 11,67% de los usuarios de Java

Supongo que te gusta

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