如何按指定的大小获取数组列表中字符串的所有排列

时间:2014-05-21 09:40:48

标签: java arrays

我试图在两个单词的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的单词的所有排列(所有单词的排列都以两个单词作为输出)

例如,如果输入数据如下 输入 - [访问,聚会,授权]

预期产出 - [参观,党 访问,代表团 党,访问 党代表团 代表团访问 委托,党]

电流输出 - [拜访,聚会, 党,党, 党代表团 委托,委托]

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。