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);
}
/** p>
* @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; p>
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; p>
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;
}
}