输入:一个单词的字符串。打印给定字符串的所有重新排列而不重复。 JAVA
Input: a word's string. Prints all rearrangements of the given string without repeating. JAVA
我正在尝试在 Java 中实现它,但我不知道如何实现。有什么建议吗?
示例。
输入:
abc
输出:
abc
acb
后
bca
出租车
中国篮协
输入:
aab
输出:
aab
阿巴
咩
这是我能想到的最简单的方法
String str= "abc";
ArrayList<String> letters = new ArrayList<String>();
HashSet<String> combinations = new HashSet<String>();
for(int i = 0; i<str.length();i++) {
//Break String into letters
letters.add(str.substring(i,i+1));
}
for(int i = (str.length()*2)+1;i>0;i--) {
//Will loop through maximum possible outcomes
String result = "";
String bin = Integer.toBinaryString(i);
//System.out.println(bin);
while(bin.length()<3) {
bin="0"+bin;
}
for(int b = bin.length();b>0;b--) {
if(bin.substring(b-1,b).equals("1"))result = result.concat(letters.get(b-1));
}
for(int b = bin.length();b>0;b--) {
if(bin.substring(b-1,b).equals("0"))result = result.concat(letters.get(b-1));
}
combinations.add(result);
}
System.out.println(str);
for(String c : combinations) {
System.out.println(c);
}
它使用二进制循环遍历原始字符串的数组,然后将结果添加到哈希集中以删除重复项
我正在尝试在 Java 中实现它,但我不知道如何实现。有什么建议吗?
示例。
输入:
abc
输出:
abc
acb
后
bca
出租车
中国篮协
输入:
aab
输出:
aab
阿巴
咩
这是我能想到的最简单的方法
String str= "abc";
ArrayList<String> letters = new ArrayList<String>();
HashSet<String> combinations = new HashSet<String>();
for(int i = 0; i<str.length();i++) {
//Break String into letters
letters.add(str.substring(i,i+1));
}
for(int i = (str.length()*2)+1;i>0;i--) {
//Will loop through maximum possible outcomes
String result = "";
String bin = Integer.toBinaryString(i);
//System.out.println(bin);
while(bin.length()<3) {
bin="0"+bin;
}
for(int b = bin.length();b>0;b--) {
if(bin.substring(b-1,b).equals("1"))result = result.concat(letters.get(b-1));
}
for(int b = bin.length();b>0;b--) {
if(bin.substring(b-1,b).equals("0"))result = result.concat(letters.get(b-1));
}
combinations.add(result);
}
System.out.println(str);
for(String c : combinations) {
System.out.println(c);
}
它使用二进制循环遍历原始字符串的数组,然后将结果添加到哈希集中以删除重复项