目录
重复排列
下面实例介绍一下我做过的一种组合,假设有两个维度的数据:
payloads = {1,2,3}
parameters = {a,b}
这两个维度的数据,可以任意改变长度。
想要实现效果为:
在a,b参数上,组合成所有可能组合,一个参数一次只能选取一个payloads内的值。
下面是推演每一步的步骤:
简化之后:
第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
\[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);
}