Matrix Diagonal Sum in Java, C# e Python

Matrix Diagonal Sum in Java, C# e Python

Data una matrice quadrata, restituisci la somma delle diagonali della matrice.

Includi solo la somma di tutti gli elementi della diagonale primaria e di tutti gli elementi della diagonale secondaria che non fanno parte della diagonale primaria.

Esempio 1:

Input: mat = [[1,2,3],
              [4,5,6],
              [7,8,9]]
Output: 25
Explanation: Diagonals sum: 1 + 5 + 9 + 3 + 7 = 25
Notice that element mat[1][1] = 5 is counted only once.

Esempio 2:

Input: mat = [[1,1,1,1],
              [1,1,1,1],
              [1,1,1,1],
              [1,1,1,1]]
Output: 8

Esempio 3:

Input: mat = [[5]]
Output: 5

Vincoli:

  • n == mat.length == mat[i].length
  • 1 <= n <= 100
  • 1 <= mat[i][j] <= 100

Soluzione:

    public int DiagonalSum(int[][] mat) {
        int sum = 0;
            int rowS=0,colE=mat[0].Length-1;
            for (int i = 0; i < mat.Length; i++)
            {
                for (int j = 0; j < mat[i].Length; j++)
                {
                    if(i==j || (rowS==i && colE==j))
                    {
                        sum+=mat[i][j];
                    }
                }
                rowS++;
                colE--;
            }

            return sum;
    }

Spiegazione:

Diagonale da sinistra a destra, il valore di i è uguale al valore di j . mat[0,0],mat[1,1],mat[2,2] sono tutti elementi diagonali a sinistra ma in sintesi abbiamo bisogno di elementi diagonali da destra a sinistra quindi in questo caso dobbiamo controllare i valori di i e j .

Per gli elementi 3, 5 e 7, i valori di i, j sono i=0,j=2 ,i=1,j=1 e i=2,j=0 , qui l'osservazione è i valore crescente e j il valore sta diminuendo. Stiamo usando rowS,colE queste variabili in if condition e dopo l'esecuzione del ciclo interno for stiamo incrementando(rowS) e decrementando(colE).

Complessità temporale:

O(N 2 )

Hai bisogno di aiuto?

Leggi di nuovo questo post, se hai qualche confusione, oppure aggiungi le tue domande alla Community


No