我想了解这个算法的工作原理。我有一个Permute类,其方法是permute(),它打印给定数组的所有可能的排列。我尝试了{1, 2, 3}
。当我使用调试器检查时,我不明白这个if语句是如何工作的if (k == arr.size() -1)
它在k == 1
和arr.size() == 3
时评估为false,在k == 2 and arr.size() == 3
时评估为true。
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);
}
}
答案 0 :(得分:1)
arr.size() - 1 == 2当大小为3.所以这是匹配。
arr.size() - 1 == 1当大小为2时,所以它不匹配1;
检查使用-1位,因为数组索引从0开始。因此,包含5个元素的数组将为0,1,2,3,4,大小将等于5.
答案 1 :(得分:1)
如果你问为什么if(k == arr.size()-1)从给定的输入中返回true或false -
当k == 1且arr.size()== 3 时, 的计算结果为false
此处检查是 并在k == 2和arr.size()== 3时计算结果为真。 此处如果检查为1 == (3-1)?
。它不相等所以返回错误。2 == (3-1)?
它是相等的,因此返回true。