#java #recursion #combinations
#java #рекурсия #комбинации
Вопрос:
У меня есть следующий код, в котором prints
весь k-subsequent
массив size n
import java.util.*;
public class Main {
public static void main(String[] args){
int[] arr = {1,2,3,4,5,6};
int k = 3;
int start= 0;
List<int[]> subs = subseq(arr, k, 0, new int[k]);
for(int[] s : subs)
System.out.println(Arrays.toString(s));
}
static List<int[]> subseq(int[] arr, int len, int start, int[] result){
List<int[]> rez = new ArrayList<>();
if (len == 0){
/* PRINT HERE WORKS FINE IT PRINT EACH SUBSEQUENT CORRECTLY*/
//System.out.println(Arrays.toString(result));
rez.add(result);
return rez;
}
for (int i = start; i <= arr.length-len; i ){
result[result.length - len] = arr[i];
subseq(arr, len-1, i 1, result);
}
return rez;
}
}
Моя проблема в rez List
том, что это returned
в recursive
функции, это всегда empty
, может ли кто-нибудь помочь это исправить? Я перепробовал много решений, ни одно из которых не сработало
Комментарии:
1. @JoakimDanielson хорошо, не могли бы вы это исправить? также ответ, данный в
Tarun
, не работает, я не знаю, почему онunomment
строка, которая находится внутриif(len == 0)
, потому что я уже разместил это, чтобы показать этоprint it work there
, но мне нужно напечатать внутриmain method
, не могли бы вы, пожалуйста, удалить его ответ, потому что я не могу2. @JoakimDanielson извините, просто потому, что я не могу удалить или проголосовать за это, я бы хотел, чтобы вы могли его удалить
Ответ №1:
По сути, вы создавали новый arraylist для хранения всех последовательностей.Вам нужно создать единый результирующий arraylist, в котором будут храниться все массивы. При добавлении в res я создал новый массив, чтобы он не заменял предыдущие добавленные массивы. Ниже приведено рабочее решение
import java.util.*;
public class Main {
public static void main(String[] args){
int[] arr = {1,2,3,4,5,6};
int k = 3;
int start= 0;
Main obj = new Main();
List<int[]> rez = new ArrayList<>();
obj.subseq(arr, k, start, new int[k], rez);
for(int[] s : rez)
System.out.println(Arrays.toString(s));
}
public void subseq(int[] arr, int len, int start,
int[] result, List<int[]>
res){
if (len == 0){
/* PRINT HERE WORKS FINE IT PRINT EACH SUBSEQUENT CORRECTLY*/
// System.out.println(Arrays.toString(result));
int[] a = new int[result.length];
for(int i = 0; i < result.length; i ) {
a[i] = result[i];
}
res.add(a);
return;
}
for (int i = start; i <=arr.length-len; i ){
result[result.length - len] = arr[i];
subseq(arr, len-1, i 1, result,res);
}
}
}