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就能得到最后结果。
推荐阅读
- Java|Java基础——数组
- 人工智能|干货!人体姿态估计与运动预测
- java简介|Java是什么(Java能用来干什么?)
- Java|规范的打印日志
- Linux|109 个实用 shell 脚本
- 程序员|【高级Java架构师系统学习】毕业一年萌新的Java大厂面经,最新整理
- Spring注解驱动第十讲--@Autowired使用
- SqlServer|sql server的UPDLOCK、HOLDLOCK试验
- jvm|【JVM】JVM08(java内存模型解析[JMM])
- 技术|为参加2021年蓝桥杯Java软件开发大学B组细心整理常见基础知识、搜索和常用算法解析例题(持续更新...)