Java|Java中的全排列代码实现

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

public class Permutation {List 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就能得到最后结果。

    推荐阅读