可能重复:
生成给定字符串的所有排列
给定一个长度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)
这似乎只是做排列,而不是我想要的.......提前谢谢你:)
可以用你计算的方式来考虑它.你在技术上从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的所有组合的方式相同.
编辑:
感谢您发布您的代码.你是对的,你在做排列.一种更好的方式是使用一个多组合(组合与所述进排序集合组合重复的元素)算法等所讨论的一个这里.