我想了解这个算法是如何工作的。我有一个带有方法 permute() 的 Permute 类,它打印给定数组的所有可能排列。我试过了{1, 2, 3}
。当我用调试器检查时,我不明白这个 if 语句是如何工作的。它在和if (k == arr.size() -1)
时计算为假,在 时计算为真。k == 1
arr.size() == 3
k == 2 and arr.size() == 3
public class Permute
{
static void permute(java.util.List<Integer> arr, int k){
for(int i = k; i < arr.size(); i++){
java.util.Collections.swap(arr, i, k);
permute(arr, k+1);
java.util.Collections.swap(arr, k, i);
}
if (k == arr.size() -1){
System.out.println(java.util.Arrays.toString(arr.toArray()));
}
}
public static void main(String[] args){
Permute.permute(java.util.Arrays.asList(1,2,3), 0);
}
}