我正在编写JAVA代码以生成整数数组的所有排列。
尽管我得到的排列数正确,但是排列本身并不正确。

运行时,我获得:

Input array Length
3
1
2
3
0Permutation is
1,  2,  3,
##########################
1Permutation is
1,  3,  2,
##########################
2Permutation is
3,  1,  2,
##########################
3Permutation is
3,  2,  1,
##########################
4Permutation is
1,  2,  3,
##########################
5Permutation is
1,  3,  2,
##########################
6  number of permutations obtained
BUILD SUCCESSFUL (total time: 3 seconds)


public class PermulteArray {

    public static int counter = 0;

    public static void Permute(int[] input, int startindex) {
        int size = input.length;

        if (size == startindex + 1) {
            System.out.println(counter + "Permutation is");
            for (int i = 0; i < size; i++) {
                System.out.print(input[i] + ",  ");
            }
            System.out.println();
            System.out.println("##########################");
            counter++;
        } else {
            for (int i = startindex; i < size; i++) {

                int temp = input[i];
                input[i] = input[startindex];
                input[startindex] = temp;
                Permute(input, startindex + 1);
            }
        }
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println("Input array Length");
        int arraylength = in.nextInt();
        int[] input = new int[arraylength];
        for (int i = 0; i < arraylength; i++) {
            input[i] = in.nextInt();
        }
        counter = 0;
        Permute(input, 0);
        System.out.println(counter + "  number of permutations obtained");
    }
}

最佳答案

int temp=input[i];
input[i]=input[startindex];
input[startindex]=temp;
Permute(input, startindex+1);

您在调用Permute之前已经交换了一个元素,但是之后需要再次交换它,以在for循环的迭代中保持元素的一致位置。

10-04 23:19
查看更多