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]; } |