如何保存为ArrayList <string>,字符串中一组字符的所有可能组合?

时间:2017-06-06 16:56:08

标签: java

如何将字符串中的一组字符的所有可能组合保存为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);
}

2 个答案:

答案 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();

    }

}

enter image description here

  

这是我的版本,您的组合方法已更改

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;

    }

}

enter image description here