Red de conocimiento informático - Aprendizaje de programación - Programación Java: enumera todas las combinaciones que suman 20 de la matriz (1, 2, 4, 6, 9), por ejemplo, 9 9 2=20

Programación Java: enumera todas las combinaciones que suman 20 de la matriz (1, 2, 4, 6, 9), por ejemplo, 9 9 2=20

// Solo usa la recursividad. Te daré una demostración. Tómalo y ejecútalo directamente. Si no entiendes nada, deja un mensaje.

Prueba de clase pública {.

public static void main(String[] args) {

int[] arr = {1, 2, 4, 6, 9}

Listlt; ; Integert; lst = new ArrayListlt;Integergt;();

nueva Prueba().add(arr, 20, 5, lst);

}

/**

* @param arr target array

* @param valor objetivo a sumar

* @param index Este parámetro es el más importante. cuyo objetivo es garantizar la eliminación de situaciones de recorridos repetidos, lo que puede reducir en gran medida el número de recorridos

* @param cur ruta actualmente guardada

* */

public void add(int[] arr , int target, int index, Listlt; Integergt; cur){

if( target lt; getMin(arr))

return;

else{

for(int i = index-1; i gt; = 0; i -- ){

if(arr[i] == objetivo ){

for(Entero o: copyAndAdd(cur, arr[i]))

System.out.print(o ",");

System.out.println();

//Generar la ruta igual a 20

}

else{

add(arr) , destino-arr[i], i 1, copyAndAdd(cur, arr[i]));

}

}

}

}

//Copia profunda de la lista y agrega el nuevo nodo a la ruta

public Listlt; copyAndAdd(Listlt; Integergt; lst, int item){

Listlt;cur_t = new ArrayListlt;

cur_t.addAll(lst); /p>

return cur_t;

}

public int getMin(int[] arr){

int k = Integer.MAX_VALUE;

if( null == arr || arr.length lt; 1)

return k;

for(int i = 0; i lt; arr.length ; i ){

si(arr[i] lt; k)

k = arr[i];

}

retirado

urna k;

}

}