【Java.算法】用于产生数组全排列结果的工具类Arranger

【代码】

import java.util.ArrayList;
import java.util.List;

/**
 * 用于产生数组全排列结果的工具类
 * @since 2023/4/21
 */
public class Arranger {
    // 保存在内部的原始元素数组的引用
    private int[] rawArr;

    // 返回结果
    private List<List<Integer>> results;

    /**
     * 构造函数
     * 
     * @param raws 原始元素数组
     */
    public Arranger(int[] raws) {
        rawArr = raws;
        results = new ArrayList<>();

        doArrange(new ArrayList<>());
    }

    /**
     * 使用递归进行全排列,结果放在results中
     * 
     * @param initialList 初始链表
     */
    private void doArrange(List<Integer> initialList) {
        List<Integer> innerList = new ArrayList<>(initialList);

        if (rawArr.length == initialList.size()) {
            results.add(innerList);
        }

        for (int i = 0; i < rawArr.length; i++) {
            if (innerList.contains(rawArr[i])) {
                continue;
            }

            innerList.add(rawArr[i]);
            doArrange(innerList);
            innerList.remove(innerList.size() - 1);
        }
    }

    /**
     * 获得结果链表的引用
     * 
     * @return
     */
    public List<List<Integer>> getResults() {
        return results;
    }

    // 测试
    public static void main(String[] args) {
        int[] numbers = { 1, 2, 3, 4, 5, 6 };
        Arranger arranger = new Arranger(numbers);

        int idx = 0;
        for (List<Integer> re : arranger.getResults()) {
            System.out.println(String.format("%02d", ++idx) + "." + re);
        }
    }
}

 

【对1,2,3的全排列】

01.[1, 2, 3]
02.[1, 3, 2]
03.[2, 1, 3]
04.[2, 3, 1]
05.[3, 1, 2]
06.[3, 2, 1]

 

【对1,2,3,4的全排列】

01.[1, 2, 3, 4]
02.[1, 2, 4, 3]
03.[1, 3, 2, 4]
04.[1, 3, 4, 2]
05.[1, 4, 2, 3]
06.[1, 4, 3, 2]
07.[2, 1, 3, 4]
08.[2, 1, 4, 3]
09.[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,2,3,4,5的全排列】

01.[1, 2, 3, 4, 5]
02.[1, 2, 3, 5, 4]
03.[1, 2, 4, 3, 5]
04.[1, 2, 4, 5, 3]
05.[1, 2, 5, 3, 4]
06.[1, 2, 5, 4, 3]
07.[1, 3, 2, 4, 5]
08.[1, 3, 2, 5, 4]
09.[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]

 

END

posted @ 2022-12-21 19:38  逆火狂飙  阅读(126)  评论(1编辑  收藏  举报
生当作人杰 死亦为鬼雄 至今思项羽 不肯过江东