【问题标题】:DFS to find all permutations of subsetsDFS 查找子集的所有排列
【发布时间】:2021-01-28 03:19:37
【问题描述】:

给定一个没有重复字符的字符串,返回一个包含该字符串及其所有子集的所有排列的列表。

例子

Set = "abc",所有排列为:["", "a", "ab", "abc", "ac", "acb", "b", "ba", "bac", "bc", "bca", "c", "cb", "cba", "ca", "cab"]

如果我把整个事情分成两部分,我知道该怎么做:

  1. 查找所有子集
  2. 对于每个子集,找到所有排列

但我想知道是否有一种方法可以编写 DFS 辅助函数来一步完成。

【问题讨论】:

标签: java algorithm depth-first-search


【解决方案1】:

当然。这不是最快的方法,但它很简单,并且按字典顺序枚举,使得输入字符串是最小排列。

private static void printPerms(char[] set, int i) {
  System.out.println(new String(set, 0, i));
  for (int j = i; j < set.length; j++) {
    char c = set[j];
    // move c to position i
    for (int k = j; k > i; k--) {
      set[k] = set[k - 1];
    }
    set[i] = c;
    printPerms(set, i + 1);
    // move c back to position j
    for (int k = i; k < j; k++) {
      set[k] = set[k + 1];
    }
    set[j] = c;
  }
}

【讨论】:

    猜你喜欢
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-01
    • 1970-01-01
    相关资源
    最近更新 更多