然而,我得到的结果各不相同(第二个是错误的,提供了一个重复排列)。出了什么问题,我该怎么解决?
原始实施:
func permutations(_ n:Int, _ a: inout Array<Character>) {
if n == 1 {print(String(a)); return}
for i in 0..<n-1 {
permutations(n-1,&a)
a.swapAt(n-1, (n%2 == 1) ? 0 : i)
}
permutations(n-1,&a)
}
var arr = Array("ABC".characters)
permutations(arr.count,&arr)
不带inout参数的实现:
func permutations (_ n: Int, _ a: Array<Character>) {
var ary = a
if (n == 1){
print(String(ary));
return
}
for i in 0..<n-1 {
permutations(n-1, ary)
ary.swapAt(n-1, (n%2 == 1) ? 0 : i)
}
permutations(n-1, ary)
}
var arr = Array("ABC".characters)
permutations(arr.count,arr)
输出:
输出:ABC BAC CBA BCA ABC BAC
注意,我们在这个输出中没有CAB,而且还有“BAC”和“ABC”的重复。
我不太明白这两者是如何不等价的,我想创建一个没有inout参数的算法版本。