Categorías
Algorithms

LeetCode – Triángulo (Java)

Dado un triángulo, encuentre la suma mínima de la ruta de arriba a abajo. Cada paso puede moverse a los números adyacentes en la fila de abajo.

Por ejemplo, dado el siguiente triángulo

[
     [2],
    [3,4],
   [6,5,7],
  [4,1,8,3]
]

La suma mínima de la ruta de arriba a abajo es 11 (es decir, 2 + 3 + 5 + 1 = 11).

Nota: punto de bonificación si puede hacer esto usando solo O (n) espacio adicional, donde n es el número total de filas en el triángulo.

De abajo hacia arriba (buena solución)

De hecho, podemos comenzar desde la parte inferior del triángulo.

public int minimumTotal(ArrayList<ArrayList<Integer>> triangle) {
	int[] total = new int[triangle.size()];
	int l = triangle.size() - 1;
 
	for (int i = 0; i < triangle.get(l).size(); i++) {
		total[i] = triangle.get(l).get(i);
	}
 
	// iterate from last second row
	for (int i = triangle.size() - 2; i >= 0; i--) {
		for (int j = 0; j < triangle.get(i + 1).size() - 1; j++) {
			total[j] = triangle.get(i).get(j) + Math.min(total[j], total[j + 1]);
		}
	}
 
	return total[0];
}

  LeetCode - Intersección de dos matrices (Java)

Por Programación.Click

Más de 20 años programando en diferentes lenguajes de programación. Apasionado del code clean y el terminar lo que se empieza. ¿Programamos de verdad?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *