-1

このアルゴリズムがどのように機能するかを理解したい。指定された配列のすべての可能な順列を出力するメソッド permute() を持つクラス Permute があります。でやってみました{1, 2, 3}if (k == arr.size() -1) デバッガで確認したところk == 1、このif文の仕組みがわかりませんでしarr.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

arr.size()-1 == 2 サイズが 3 の場合、一致します。

arr.size()-1 == サイズが 2 の場合は 1 なので、1 には一致しません。

配列インデックスは 0 から始まるため、チェックでは -1 ビットが使用されます。したがって、5 つの要素を持つ配列は 0、1、2、3、4 になり、サイズは 5 になります。

于 2013-09-22T15:47:30.470 に答える
1

(k == arr.size() -1) が与えられた入力から true または false を返す理由を尋ねている場合 -

k == 1 および arr.size() == 3 の場合、false と評価されます

ここで、チェックが1 == (3-1)?. 等しくないため、false を返します。

k == 2 および arr.size() == 3 の場合に true と評価されます。

ここで、checks が2 == (3-1)?等しい場合は true を返します。

于 2013-09-22T23:55:46.703 に答える