私は、一連のデータのすべての組み合わせを返すために遭遇した再帰アルゴリズムの修正版を使用しています。たとえば、データセットが["ABCD"、 "ACDEF"、 "ABDFG"、 "BDEF"、 "CGEGD"]である場合、リスト内で次のようにしたいと思います。指定された長さの別の一意の要素。 BEF、BCF、BCG、BDE、BDF、BDG、BEF、BEF、BEF、BEF、BEF、BEF、 BEG、BFG、CDE、CDF、CDG、CEF、CEG、CFG、DEF、DEG、DFG、EFGJavaの再帰的void関数からの結果を使用し、それぞれをリストに追加して別の関数に返します。
ここでは、これまでの私のクラスである:
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
class Comboo {
public static void combinationAssShit(String arr[], String data[], int start, int end, int index, int r){
if (index == r)
{
for (int j=0; j<r; j++)
System.out.print(data[j]+" ");
System.out.println("");
return;
}
for (int i=start; i<=end && end-i >= r-index; i++)
{
data[index] = arr[i];
combinationAssShit(arr, data, i+1, end, index+1, r);
}
}
public static void printCombination(String arr[], int n, int r)
{
String data[]=new String[r];
combinationAssShit(arr, data, 0, n, 0, r);
}
public static String[] singleElem(String[] data) {
List<String> single = new ArrayList<String>();
for (String element: data) {
for (int x = 0; x < element.length(); x++) {
single.add(Character.toString(element.charAt(x)));
}
}
Set<String> singleS = new LinkedHashSet<String>(single);
List<String> singleL = new ArrayList<String>();
singleL.addAll(singleS);
String[] john = singleL.toArray(new String[singleL.size()]);
return john;
}
public static void main (String[] args) {
String arr[] = {"ABCD", "ACDEF", "ABDFG", "BDEF", "CGEGD"};
int r = 3;
String[] t = singleElem(arr);
int n = t.length;
printCombination(t, n, r);
}
}
ますのでご注意ください。私は、訂正がたくさんあることを知っています。私はJavaの新しいブランドです。私はC++とPythonに慣れています。この問題の場合、コンボジェネレータから結果を返すことで、リスト内のコンビネーションを簡単に収集できます。
void関数の結果はありません。それがvoidの定義です。他の場所で使用するには、実際の値(Stringなど)を返す必要があります。 –
私は理解しています、これはここでの問題です。どのように私は再帰的なループで文字列を返す必要があるかについてのヒントを得た? – Ripha
"私はC++とPythonに慣れています。この問題の場合、コンボジェネレータの結果を返すことでリスト内のコンビネーションを簡単に収集できます。"私はあなたがこれによって何を意味しているのか知りたいのです。あなたはJavaで同じことをすることができるはずです。 – DavidS