重复排列

下面实例介绍一下我做过的一种组合,假设有两个维度的数据:
payloads = {1,2,3}
parameters = {a,b}
这两个维度的数据,可以任意改变长度。

想要实现效果为:
在a,b参数上,组合成所有可能组合,一个参数一次只能选取一个payloads内的值。

下面是推演每一步的步骤:
image

简化之后:
第1次:
b3,a3

第2次:
b3,a2

第3次:
b3,a1

第4次:
b2,a3

第5次:
b2,a2

第6次:
b2,a1

第7次:
b1,a3

第8次:
b1,a2

第9次:
b1,a3

image

image

\[n^r \]

代码实现:
使用递归来生成所有可能的排列。

    // 生成重复排列, 使用递归来生成所有可能的排列
    public static void generatePermutations(List<String> nums, List<String> current, int length) {
        // 如果当前排列长度等于所需长度,打印当前排列并返回;
        if (current.size() == length) {
            System.out.println(current);
            return;
        }

        // 递归生成排列
        for (int i = 0; i < nums.size(); i++) {
            current.add(nums.get(i)); // 将当前数字添加到排列中
            generatePermutations(nums, current, length); // 递归调用生成下一个数字的排列
            current.remove(current.size() - 1); // 回溯,移除刚才添加的payload值,继续生成下一个排列
        }
    }

    public static void main(String[] args) {
        List<String> payloads = Arrays.asList("1", "2", "3"); // 要生成排列的payload列表

        List<String> points = Arrays.asList("a", "b");
        int length = points.size(); //想要的每个排列的长度
        
        // new ArrayList<>()是创建一个新的ArrayList对象的语法。
        // 创建了一个空的ArrayList,没有指定其初始容量。
        // 在这个程序中,我们使用它来作为递归函数中的参数,用于存储当前正在生成的排列。
        generatePermutations(payloads, new ArrayList<>(), length);
    }
posted on 2024-04-29 11:11  Mysticbinary  阅读(47)  评论(0编辑  收藏  举报