【Java.算法】使用回溯实现的全排列算法
【代码】
import java.util.ArrayList; import java.util.List; public class Arrange { static List<List<Integer>> res = new ArrayList<>(); public static void main(String[] args) { int[] arr = {1,2,3}; Arrange h1 = new Arrange(); h1.dfs(arr,new ArrayList<>()); int idx=0; for (List<Integer> re : res) { System.out.println((++idx)+"."+re); } } public List<List<Integer>> dfs( int[] arr,List<Integer> list){ List<Integer> temp = new ArrayList<>(list); if (arr.length == list.size()){ res.add(temp); } for (int i=0;i<arr.length;i++){ if (temp.contains(arr[i])){ continue; } temp.add(arr[i]); dfs(arr,temp); temp.remove(temp.size()-1); } return res; } }
【两个元素的全排列效果】
1.[1, 2]
2.[2, 1]
【三个元素的全排列效果】
1.[1, 2, 3] 2.[1, 3, 2] 3.[2, 1, 3] 4.[2, 3, 1] 5.[3, 1, 2] 6.[3, 2, 1]
【四个元素的全排列效果】
1.[1, 2, 3, 4] 2.[1, 2, 4, 3] 3.[1, 3, 2, 4] 4.[1, 3, 4, 2] 5.[1, 4, 2, 3] 6.[1, 4, 3, 2] 7.[2, 1, 3, 4] 8.[2, 1, 4, 3] 9.[2, 3, 1, 4] 10.[2, 3, 4, 1] 11.[2, 4, 1, 3] 12.[2, 4, 3, 1] 13.[3, 1, 2, 4] 14.[3, 1, 4, 2] 15.[3, 2, 1, 4] 16.[3, 2, 4, 1] 17.[3, 4, 1, 2] 18.[3, 4, 2, 1] 19.[4, 1, 2, 3] 20.[4, 1, 3, 2] 21.[4, 2, 1, 3] 22.[4, 2, 3, 1] 23.[4, 3, 1, 2] 24.[4, 3, 2, 1]
【五个元素的全排列效果】
1.[1, 2, 3, 4, 5] 2.[1, 2, 3, 5, 4] 3.[1, 2, 4, 3, 5] 4.[1, 2, 4, 5, 3] 5.[1, 2, 5, 3, 4] 6.[1, 2, 5, 4, 3] 7.[1, 3, 2, 4, 5] 8.[1, 3, 2, 5, 4] 9.[1, 3, 4, 2, 5] 10.[1, 3, 4, 5, 2] 11.[1, 3, 5, 2, 4] 12.[1, 3, 5, 4, 2] 13.[1, 4, 2, 3, 5] 14.[1, 4, 2, 5, 3] 15.[1, 4, 3, 2, 5] 16.[1, 4, 3, 5, 2] 17.[1, 4, 5, 2, 3] 18.[1, 4, 5, 3, 2] 19.[1, 5, 2, 3, 4] 20.[1, 5, 2, 4, 3] 21.[1, 5, 3, 2, 4] 22.[1, 5, 3, 4, 2] 23.[1, 5, 4, 2, 3] 24.[1, 5, 4, 3, 2] 25.[2, 1, 3, 4, 5] 26.[2, 1, 3, 5, 4] 27.[2, 1, 4, 3, 5] 28.[2, 1, 4, 5, 3] 29.[2, 1, 5, 3, 4] 30.[2, 1, 5, 4, 3] 31.[2, 3, 1, 4, 5] 32.[2, 3, 1, 5, 4] 33.[2, 3, 4, 1, 5] 34.[2, 3, 4, 5, 1] 35.[2, 3, 5, 1, 4] 36.[2, 3, 5, 4, 1] 37.[2, 4, 1, 3, 5] 38.[2, 4, 1, 5, 3] 39.[2, 4, 3, 1, 5] 40.[2, 4, 3, 5, 1] 41.[2, 4, 5, 1, 3] 42.[2, 4, 5, 3, 1] 43.[2, 5, 1, 3, 4] 44.[2, 5, 1, 4, 3] 45.[2, 5, 3, 1, 4] 46.[2, 5, 3, 4, 1] 47.[2, 5, 4, 1, 3] 48.[2, 5, 4, 3, 1] 49.[3, 1, 2, 4, 5] 50.[3, 1, 2, 5, 4] 51.[3, 1, 4, 2, 5] 52.[3, 1, 4, 5, 2] 53.[3, 1, 5, 2, 4] 54.[3, 1, 5, 4, 2] 55.[3, 2, 1, 4, 5] 56.[3, 2, 1, 5, 4] 57.[3, 2, 4, 1, 5] 58.[3, 2, 4, 5, 1] 59.[3, 2, 5, 1, 4] 60.[3, 2, 5, 4, 1] 61.[3, 4, 1, 2, 5] 62.[3, 4, 1, 5, 2] 63.[3, 4, 2, 1, 5] 64.[3, 4, 2, 5, 1] 65.[3, 4, 5, 1, 2] 66.[3, 4, 5, 2, 1] 67.[3, 5, 1, 2, 4] 68.[3, 5, 1, 4, 2] 69.[3, 5, 2, 1, 4] 70.[3, 5, 2, 4, 1] 71.[3, 5, 4, 1, 2] 72.[3, 5, 4, 2, 1] 73.[4, 1, 2, 3, 5] 74.[4, 1, 2, 5, 3] 75.[4, 1, 3, 2, 5] 76.[4, 1, 3, 5, 2] 77.[4, 1, 5, 2, 3] 78.[4, 1, 5, 3, 2] 79.[4, 2, 1, 3, 5] 80.[4, 2, 1, 5, 3] 81.[4, 2, 3, 1, 5] 82.[4, 2, 3, 5, 1] 83.[4, 2, 5, 1, 3] 84.[4, 2, 5, 3, 1] 85.[4, 3, 1, 2, 5] 86.[4, 3, 1, 5, 2] 87.[4, 3, 2, 1, 5] 88.[4, 3, 2, 5, 1] 89.[4, 3, 5, 1, 2] 90.[4, 3, 5, 2, 1] 91.[4, 5, 1, 2, 3] 92.[4, 5, 1, 3, 2] 93.[4, 5, 2, 1, 3] 94.[4, 5, 2, 3, 1] 95.[4, 5, 3, 1, 2] 96.[4, 5, 3, 2, 1] 97.[5, 1, 2, 3, 4] 98.[5, 1, 2, 4, 3] 99.[5, 1, 3, 2, 4] 100.[5, 1, 3, 4, 2] 101.[5, 1, 4, 2, 3] 102.[5, 1, 4, 3, 2] 103.[5, 2, 1, 3, 4] 104.[5, 2, 1, 4, 3] 105.[5, 2, 3, 1, 4] 106.[5, 2, 3, 4, 1] 107.[5, 2, 4, 1, 3] 108.[5, 2, 4, 3, 1] 109.[5, 3, 1, 2, 4] 110.[5, 3, 1, 4, 2] 111.[5, 3, 2, 1, 4] 112.[5, 3, 2, 4, 1] 113.[5, 3, 4, 1, 2] 114.[5, 3, 4, 2, 1] 115.[5, 4, 1, 2, 3] 116.[5, 4, 1, 3, 2] 117.[5, 4, 2, 1, 3] 118.[5, 4, 2, 3, 1] 119.[5, 4, 3, 1, 2] 120.[5, 4, 3, 2, 1]
【参考资料】
分类:
Java.Algorithm
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
2020-01-21 [Oracle/SQL]找出id为0的科目考试成绩及格的学生名单的四种等效SQL语句
2017-01-21 为什么一个目录里放超过十个Mp4文件会导致资源管理器和播放程序变卡变慢?
2015-01-21 【高中数学/函数/幂函数】若a=(1/2)^2/3,b=(1/5)^2/3,c=(1/2)^1/3,则a,b,c的大小关系是?
2015-01-21 【Canvas与艺术】蓝色渐变单脚四钉正方形中写盈字
2014-01-21 【Canvas与艺术】双齿轮啮合传动