您的位置:

java数组的全排列问题(java 数组全排列)

本文目录一览:

java全排列递归算法

思路:先有一个起始排列,如1234.从后面扫描,直到找到a[k],a[k]a[k+1];再从后面扫描,直到找到a[j],这里有 a[k]a[j]。交换a[k],a[j].再把a[k+1],...a[n-1]排序(从小到大),即得到了一个排列,再循环下去,直到找出所有的排序。用C语言的,参考下:

java怎么搞全排列

尽量用递归好理解一些,打个断点

public class Permutation {

public static void permulation(int[] list, int start, int length) {

int i;

if (start == length) {

for (i = 0; i length; i++)

System.out.print(list[i] + " ");

System.out.println();

} else {

for (i = start; i length; i++) {

swap(list, start, i);

permulation(list, start + 1, length);

swap(list, start, i);

}

}

}

public static void swap(int[] list, int start, int i) {

int temp;

temp = list;

list = list[i];

list[i] = temp;

}

public static void main(String[] args) {

int length = 3;

int start = 0;

int list[] = new int[length];

for (int j = 0; j length; j++)

list[j] = j + 1;

permulation(list, start, length);

}

}

java全排列 数组

全排列算法很多,这是其中一个,使用递归——

import java.util.ArrayList;

import java.util.List;

public class PermAComb {

    static Listint[] allSorts = new ArrayListint[]();

       

    public static void permutation(int[] nums, int start, int end) {

        if (start == end) { // 当只要求对数组中一个数字进行全排列时,只要就按该数组输出即可

            int[] newNums = new int[nums.length]; // 为新的排列创建一个数组容器

            for (int i=0; i=end; i++) {

                newNums[i] = nums[i];

            }

            allSorts.add(newNums); // 将新的排列组合存放起来

        } else {

            for (int i=start; i=end; i++) {

                int temp = nums; // 交换数组第一个元素与后续的元素

                nums = nums[i];

                nums[i] = temp;

                permutation(nums, start + 1, end); // 后续元素递归全排列

                nums[i] = nums; // 将交换后的数组还原

                nums = temp;

            }

        }

    }

       

    public static void main(String[] args) {

        int[] numArray = {1, 2, 3, 4, 5, 6};

        permutation(numArray, 0, numArray.length - 1);

        int[][] a = new int[allSorts.size()][]; // 你要的二维数组a

        allSorts.toArray(a);

           

        // 打印验证

        for (int i=0; ia.length; i++) {

            int[] nums = a[i];

            for (int j=0; jnums.length; j++) {

                System.out.print(nums[j]);

            }

            System.out.println();

        }

        System.out.println(a.length);

    }

}

java实现全排列的问题

对 深度优先搜索 先交换 然后递归 再交换回来继续循环下一种情况