목차
Code
func factorial(_ n: Int) -> Int {
var n = n
var result = 1
while n > 1 {
result *= n
n -= 1
}
return result
}
func combination<T>(_ elements: [T], _ k: Int) -> [[T]] {
var result = [[T]]()
func combi(_ index: Int, _ now: [T]) {
if now.count == k {
result.append(now)
return
}
for i in index..<elements.count {
combi(i + 1, now + [elements[i]])
}
}
combi(0, [])
return result
}
func permutation<T>(_ elements: [T], _ k: Int) -> [[T]] {
var result = [[T]]()
var visited = [Bool](repeating: false, count: elements.count)
func permut(_ now: [T]) {
if now.count == k {
result.append(now)
return
}
for i in 0..<elements.count {
if visited[i] == true { continue }
visited[i] = true
permut(now + [elements[i]])
visited[i] = false
}
}
permut([])
return result
}
Reference
-
[스위프트 “순열과 조합 구현”하기 (Swift5 Permutation, Combination)](https://developer-p.tistory.com/145)