如何将字符串中的一组字符的所有可能组合保存为ArrayList?
您可以在下面看到我的代码。它仅打印组合,但不保存所有组合。有什么想法吗?
public class All_Possible_Combinatons
{
static String combinations(char[] sequence, char[] data, int start, int end,
int index, int r)
{
if (index == r)
{
for (int j = 0; j < r; j++)
// = data[j];
System.out.print(data[j] + " ");
System.out.println();
}
for (int i = start; i <= end && ((end - i + 1) >= (r - index)); i++)
{
data[index] = sequence[i];
combinations(sequence, data, i + 1, end, index + 1, r);
}
return null;
}
public static void main(String args[])
{
char[] sequence = { '0','1','2'/*,'3','4','5','6','7','8','9',':',';','<','=','>','?','@','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','[',']','^','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z' */};
System.out.print("The combinations are: ");
// printCombinations(sequence, sequence.length);
int N=sequence.length;
char[] data = new char[N];
for (int r = 0; r < sequence.length; r++)
combinations(sequence, data, 0, N - 1, 0, r);
}
答案 0 :(得分:0)
这可能不是一个有效的但是试一试:
List<String> list = new ArrayList<>();
int[] a = {0,1,2};
for(int i: a){
list.add(i+"");
}
for(int times = 0; times < a.length; times++){
String first = a[times]+"";
for(int i = 0; i< a.length; i++){
String temp = first + i;
list.add(temp);
}
}
for(String s: list){
System.out.print(s + " ");
}
输出:
0 1 2 00 01 02 10 11 12 20 21 22
答案 1 :(得分:0)
使用您当前的方法。您需要切换方法才能正确完成此操作。
我尝试使用您当前的方法。
import java.util.ArrayList;
import java.util.List;
public class JavaApplication47
{
public static void main(String[] args)
{
char[] sequence = { '0','1','2'/*,'3','4','5','6','7','8','9',':',';','<','=','>','?','@','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','[',']','^','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z' */};
System.out.print("The combinations are: ");
// printCombinations(sequence, sequence.length);
List<String> list = new ArrayList();
int N=sequence.length;
char[] data = new char[N];
for (int r = 0; r <= sequence.length; r++)
{
list.add(combinations(sequence, data, 0, N - 1, 0, r));
}
System.out.println(list.size());
for (String combo : list)
{
System.out.println(combo);
}
}
static String combinations(char[] sequence, char[] data, int start, int end, int index, int r)
{
StringBuilder stringbuilder = new StringBuilder();
if (index == r)
{
StringBuilder stringbuilder2 = new StringBuilder();
for (int j = 0; j < r; j++)
{
//System.out.print(data[j] + " ");
stringbuilder2.append(data[j]).append(" ");
}
//System.out.println();
return stringbuilder2.append(" - ").toString();
}
for (int i = start; i <= end && ((end - i + 1) >= (r - index)); i++)
{
data[index] = sequence[i];
stringbuilder.append(combinations(sequence, data, i + 1, end, index + 1, r));
}
return stringbuilder.toString();
}
}
这是我的版本,您的组合方法已更改
import java.util.ArrayList;
import java.util.List;
public class JavaApplication47
{
public static void main(String[] args)
{
char[] sequence = { '0','1','2'/*,'3','4','5','6','7','8','9',':',';','<','=','>','?','@','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','[',']','^','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z' */};
System.out.print("The combinations are: ");
// printCombinations(sequence, sequence.length);
List<String> list = new ArrayList();
int N=sequence.length;
char[] data = new char[N];
for (int r = 0; r <= sequence.length; r++)
{
list.addAll(combinations(sequence, data, 0, N - 1, 0, r));
}
for (String combo : list)
{
System.out.println(combo);
}
System.out.println("list size: " + list.size());
}
static List<String> combinations(char[] sequence, char[] data, int start, int end, int index, int r)
{
List<String> list = new ArrayList();
if (index == r)
{
List<String> tempList = new ArrayList();
StringBuilder stringbuilder2 = new StringBuilder();
for (int j = 0; j < r; j++)
{
stringbuilder2.append(data[j]).append(" ");
}
tempList.add(stringbuilder2.toString());
return tempList;
}
for (int i = start; i <= end && ((end - i + 1) >= (r - index)); i++)
{
data[index] = sequence[i];
list.addAll(combinations(sequence, data, i + 1, end, index + 1, r));
}
return list;
}
}