【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]
【参考资料】