我试图在两个单词的java数组列表中获取字符串(单词)的所有排列。以下是我尝试的代码,但我没有得到列表中所有单词的排列。
for (int y = 0; y<newList.size(); y++){
String first = newList.get(y);
String second = "";
if(y+1<newList.size()){
second = newList.get(y+1);
}
ArrayList<String> tmpArr = new ArrayList<String>();
tmpArr.add(first);
tmpArr.add(second);
ArrayList<String> retArray = combine(tmpArr);
for (int c = 0; c <retArray.size(); c++) {
System.out.println(retArray.get(c));
}
}
public static ArrayList<String> combine(ArrayList<String> arr){
ArrayList<String> retArr = new ArrayList<String>();
if(arr.size()==0){
retArr.add("");
return retArr;
}
ArrayList<String> tmpArr = (ArrayList<String>)arr.clone();
tmpArr.remove(0);
for(String str1 : combine(tmpArr)){
for(String str2 : arr){
retArr.add(str2+","+str1);
if(retArr.size() == 10)
return retArr;
}
}
return retArr;
}
请让我知道如何更正代码以获取列表中大小为2的单词的所有排列(所有单词的排列都以两个单词作为输出)
例如,如果输入数据如下 输入 - [访问,聚会,授权]
预期产出 - [参观,党 访问,代表团 党,访问 党代表团 代表团访问 委托,党]
电流输出 - [拜访,聚会, 党,党, 党代表团 委托,委托]
答案 0 :(得分:1)
这将为您提供单词列表的所有双字排列。
List<String> strings = Arrays.asList("party","visit","delegation");
for (int i = 0; i < strings.size(); i++){
for (int j = 0; j < strings.size(); j++){
if (i != j) System.out.println(strings.get(i) + "," + strings.get(j));
}
}
编辑:添加了if语句并更改了循环,因为您也想要不同顺序的排列。
答案 1 :(得分:0)
您应该使用调试器逐步完成程序,看看会发生什么。
我对错误原因的建议是:你在每次调用组合时创建一个新的retArr,这样你只得到最后一次调用的结果。
看到你对联合收割机的所有执行使用相同的retArr。