ArrayList的排列

时间:2015-01-19 03:45:38

标签: java algorithm arraylist

有很多关于为字符串查找Permutation的指南,但是我如何为ArrayList中的每个元素执行此操作?鉴于:

ArrayList<String> list = [bob, cat, dog]

输出:

[bob, cat, dog]
[bob, dog, cat]
[dog, bob, cat]
[dog, cab, bob]
....

这是我的代码,它将置换单个

public class permutations {

public ArrayList<String> performPermutations(String s){
    ArrayList<String> arrayList = new ArrayList<String>();
    if (s == null) {
        return null;
    }

    else if (s.length() == 0) {
        arrayList.add("");
        return arrayList;
    }

    else {
        for (int i = 0; i < s.length(); i++) {
            ArrayList<String> remaining = performPermutations(s.substring(0, i) + s.substring(i + 1));
            for (int j = 0; j < remaining.size(); j++) {
                arrayList.add(s.charAt(i) + remaining.get(j));
            }
        }
        return arrayList;
    }
}


public static void main(String[] args) {
    permutations p = new permutations();
    ArrayList<String> arr = p.performPermutations("abc");
        for(int i = 0; i<arr.size();i++) {
            System.out.println(arr.get(i));
        }
 }

2 个答案:

答案 0 :(得分:0)

请参阅此处的代码以了解数字的排列:

Java code for permutation of a list of numbers

现在在你的情况下,数字列表将只是字符串ArrayList的索引列表。所以基本上索引的排列将导致字符串的排列。

答案 1 :(得分:0)

反转任何内容的简单解决方案(句子中的单词,列表中的项目等)是使用堆栈:

  1. 创建一个堆栈
  2. 循环列表中的每个项目,按下堆栈中的当前项目
  3. 循环堆栈的每个项目,在新列表中弹出当前项目
  4. 虽然在性能方面可能不是最好的,但只要你可以把它放在一个堆栈中,它就适用于所有东西。并且这两个循环彼此嵌入,所以它比你的例子更好。