是否有可能获得具有重复字符的字符串的排列?

Iza*_*ing 0 permutation dart flutter

我目前在 flutter 上使用 trotter dart 包,但是它无法生成具有重复数字的字符串的所有排列。

它适用于 1234,但不适用于 2344。

Ric*_*ler 5

(免责声明:我是 的作者trotter。感谢您对我的图书馆的兴趣!)

当处理中等数量的项目时,我们可以简单地创建从索引排列的常规序列到任意列表中的各个项目的映射。

在这种情况下,任意列表包含 string 中的项目'2344',因此我们可以生成这些项目的排列,如下所示。(但是请注意,对于无法区分的项目,排列不是唯一的。不过,我们可以通过转换为 a 来摆脱非唯一的项目Set。)

import 'package:trotter/trotter.dart';

main() {
  final items = characters('2344'),
      indices = List<int>.generate(items.length, (i) => i),
      permsOfItems = indices
          .permutations()
          .iterable
          .map((perm) => perm.map((index) => items[index]).join());

  print('All permutations (including non unique):');
  for (final perm in permsOfItems) {
    print(perm);
  }

  print('\nOnly unique:');
  for (final perm in permsOfItems.toSet()) {
    print(perm);
  }
}

Run Code Online (Sandbox Code Playgroud)

输出:

所有排列(包括非唯一排列):
2344
2344
2434
4234
4243
2443
2443
2434
4234
4243
4423
4423
4432
4432
4342
4324
3424
3442
3442
4342
4324
3424
3244
3244

唯一独特的:
2344
2434
4234
4243
2443
4423
4432
4342
4324
3424
3442
3244