func swap(_ str: inout [Character], _ i: Int, _ j: Int) {
let temp = str[i]
str[i] = str[j]
str[j] = temp
}
func generatePermutation(_ str: inout [Character], _ l: Int, _ r: Int) {
if l == r {
print(String(str))
} else {
for i in l...r {
swap(&str, l, i)
generatePermutation(&str, l + 1, r)
swap(&str, l, i) // backtrack
}
}
}
let s = "ABC"
var chars = Array(s)
generatePermutation(&chars, 0, chars.count - 1)
/*
run:
ABC
ACB
BAC
BCA
CBA
CAB
*/