背景
つい最近、結構昔にコーディングした内容を、備忘録的にこんな記事としてQiitaに載せたのですが、何かの巡り合わせでしょうか・・・?
なぜか今度はDartで順列(上記事では組み合わせのみ記載)を書くことになったので、またしても備忘録として置いておきます。
出来上がり
順列
permutation.dart
List<List<int>> permutation(List<int> list, int n) {
return n == 1
? list.map((el) => [el]).toList()
: list.asMap().entries.expand((entry){
return permutation(list.sublist(0, entry.key) + list.sublist(entry.key + 1), n - 1)
.map((el) => [entry.value] + el).toList();
}).toList();
}
print(permutation([1,2,3],2));
// expexted : [[1,2],[1,3],[2,1],[2,3],[3,1],[3,2]]
組み合わせ
combination.dart
List<List<int>> combination(List<int> list, int n) {
return n == 1
? list.map((el) => [el]).toList()
: list.asMap().entries.expand((entry){
return combination(list.sublist(entry.key + 1), n - 1)
.map((el) => [entry.value] + el).toList();
}).toList();
}
print(combination([1,2,3],2));
// expexted : [[1,2],[1,3],[2,3]]
考え方
以前書いたjavascriptと全く同じです。大した内容ではありませんが、気になる方は以下を参照ください。