【问题标题】:Permutation of an ArrayList [duplicate]ArrayList的排列[重复]
【发布时间】:2015-01-19 03:45:37
【问题描述】:

有很多关于查找字符串排列的指南,但是我将如何为 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));
        }
 }

【问题讨论】:

  • 排列大小为 N 的 ArrayList 的元素与排列数字 0 ... (N - 1) 相同,因为如果你能做到这一点,你可以通过以下方式从数字排列转换为元素排列只是依次获取每个元素。对此进行一些研究,看看您是否可以通过这种方式找到答案。

标签: java algorithm arraylist


【解决方案1】:

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

Java code for permutation of a list of numbers

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

【讨论】:

  • 感谢您的回答,但我在理解如何遍历 ArrayList 时遇到问题...从我上面的示例中,递归遍历它使用的字符串:ArrayList remaining = performPermutations (s.substring(0, i) + s.substring(i + 1));我将如何在 ArrayList 中执行此操作?我知道我需要在 for 循环中设置 *.size() 的布尔值...
  • 无视。我想通了!谢谢大家!
【解决方案2】:

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

  1. 创建堆栈
  2. 循环遍历列表中的每一项,将当前项压入堆栈
  3. 在堆栈的每个项目上循环,将当前项目弹出到新列表中

虽然就性能而言,这可能不是最好的,但只要您可以将它放在堆栈中,它就可以与所有东西一起使用。而且这两个循环没有相互嵌入,所以比你的例子要好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-13
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-29
    相关资源
    最近更新 更多