给定一个长度和一组字符,如何获得所有可能的字符串组合

Eva*_*HZY 3 java algorithm

可能重复:
生成给定字符串的所有排列

给定一个长度n=4, 和a set of characters -> {'a', 'b'},如何编写一些java代码来生成包含集合中字符的长度为n的所有可能字符串?

对于上面的示例,结果应该有2 ^ 4 = 16个字符串,即:

aaaa
aaab
aabb
abbb
baaa
baab
babb
bbbb
bbaa
bbab
bbba
abaa
abab
abba
baba
aaba
Run Code Online (Sandbox Code Playgroud)

这是我的代码片段:

public void process(String result, String string)
{
    if(string.length() == 0)
    {
        System.out.println(result);
    }else{
        for(int i = 0; i < string.length(); i++)
        {
            String newResult = new String(result+string.charAt(i));
            String newString = new String(string.substring(0,i) + string.substring(i+1, string.length()));
            process(newResult, newString);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这似乎只是做排列,而不是我想要的.......提前谢谢你:)

Bri*_*ian 7

可以用你计算的方式来考虑它.你在技术上从aaaa到bbbb"计数",就像二进制一样.

aaaa -> 0000
aaab -> 0001
aaba -> 0010
aabb -> 0011
...
bbbb -> 1111
Run Code Online (Sandbox Code Playgroud)

在没有看到你尝试过的东西的情况下,我无法帮助你,但基本上你需要通过计算它们来计算"最低"元素和"最高"元素之间的所有"数字".

对于更高的元素数,只需将您的计数视为更高的基数.对于八个元素,Set = {a,b,c,d,e,f,g,h},你将以八进制为基础计算:

aaaa -> 0000
aaab -> 0001
...
aaah -> 0007
aaba -> 0010
...
hhhh -> 7777
Run Code Online (Sandbox Code Playgroud)

通过从0000到9999的计数,这与枚举0-9的长度为4的所有组合的方式相同.

编辑:

感谢您发布您的代码.你是对的,你在做排列.一种更好的方式是使用一个多组合(组合与所述进排序集合组合重复的元素)算法等所讨论的一个这里.