-1

我想了解这个算法是如何工作的。我有一个带有方法 permute() 的 Permute 类,它打印给定数组的所有可能排列。我试过了{1, 2, 3}。当我用调试器检查时,我不明白这个 if 语句是如何工作的。它在和if (k == arr.size() -1) 时计算为假,在 时计算为真。k == 1arr.size() == 3k == 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);
    }
}
4

2 回答 2

1

当大小为 3 时 arr.size()-1 == 2。所以它是匹配的。

arr.size()-1 == 1 当大小为 2 时,所以不匹配 1;

检查使用 -1 位,因为数组索引从 0 开始。因此,具有 5 个元素的数组将变为 0、1、2、3、4,大小将等于 5。

于 2013-09-22T15:47:30.470 回答
1

如果您问为什么 if (k == arr.size() -1) 从给定的输入返回 true 或 false -

当 k == 1 和 arr.size() == 3 时计算结果为 false

这里如果检查是1 == (3-1)?. 它不相等,因此返回 false。

并在 k == 2 和 arr.size() == 3 时评估为真。

在这里,如果检查是否2 == (3-1)?相等,则返回 true。

于 2013-09-22T23:55:46.703 回答