Java中的全排列代码实现

Java中的全排列代码实现

全排列问题是指给定一个字符串或者数组,求解字符串中字符或数组中数字所有可能出现的排列。比如数组[0,1,2,3,4],求解该数组的全排列。我们在数学上碰到这种问题,第一反应肯定是先从0开始,找[1,2,3,4]的全排列;然后从1开始,找[2,3,4]的全排列;以此类推,显然最后变成了一个递归问题。

public class Permutation {

    List<String> list = new ArrayList<>();

    public void permute(int[] array, int start) {
        if (start == array.length) { 
            list.add(Arrays.toString(array));//把所有可能的全排列存到list里
        } else
            for (int i = start; i < array.length; ++i) {
                swap(array, start, i); // 交换元素
                permute(array, start + 1); // 交换后,再进行全排列
                swap(array, start, i); // 还原
            }
    }

    private void swap(int[] array, int s, int i) {
        int t = array[s];
        array[s] = array[i];
        array[i] = t;
    }

}

但是显然,上面的代码有一定的问题,那就是如果数组里面出现重复元素的话的,那么list一定会有重复的排列,如果想去掉重复元素那应该如何解决?我们最先想到的可能就是把存储结果的容器换成HashMap,因为HashMap的Key是唯一的,这样可以保证没有重复的排列。最后,我们遍历这个HashMap的Key就能得到最后结果。

猜你喜欢

转载自blog.csdn.net/ch_609583349/article/details/81533114