非常に効率の悪いものですが書いてみました。引数の整数は重複がないものと勝手に想定しています。
主な処理はpermutateで行っています。考え方は「restにある要素を順番にひとつづつpermの末尾へ移動しつつ、残ったrestの組み合わせを再帰呼び出しで作る」というものです。
普段swiftを使っておられるプログラマーの方から見れば相当不格好なものであると思います。
swift
1func algorithm(someInt:Int...) {
2 func permutate(perm:[Int], rest:[Int]) -> [[Int]] {
3 var result:[[Int]] = []
4 if rest.isEmpty {
5 return [perm]
6 }
7 for i in 0..<rest.count {
8 var nextPerm = perm
9 nextPerm.append(rest[i])
10 var nextRest = rest
11 nextRest.remove(at: i)
12 result += permutate(perm:nextPerm, rest:nextRest)
13 }
14 return result
15 }
16
17 let initialPerm:[Int] = []
18 let allPerm = permutate(perm:initialPerm, rest:someInt)
19
20 // print result for debug
21 for i in 0..<allPerm.count {
22 print(i.description + ": " + allPerm[i].description)
23 }
24 // ...
25}
26
27algorithm(someInt: 1, 2, 3)
==>結果
0: [1, 2, 3]
1: [1, 3, 2]
2: [2, 1, 3]
3: [2, 3, 1]
4: [3, 1, 2]
5: [3, 2, 1]
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。