Java 遍历数字数组的每个排列

Java 遍历数字数组的每个排列,java,Java,我的问题是这样的:数组中有n个数字,每个数字的最大值为m,我想迭代这些数字的每个排列,逐个递增,直到它们达到最大值 例如: [0,0,0,0] Integer @ index 0 has a max value of 5 Integer @ index 1 has a max value of 3 Integer @ index 2 has a max value of 4 Integer @ index 3 has a max value of 6 Output: [0,0,0,1] [

我的问题是这样的:数组中有n个数字,每个数字的最大值为m,我想迭代这些数字的每个排列,逐个递增,直到它们达到最大值

例如:

[0,0,0,0]

Integer @ index 0 has a max value of 5
Integer @ index 1 has a max value of 3
Integer @ index 2 has a max value of 4
Integer @ index 3 has a max value of 6

Output: 
[0,0,0,1]
[0,0,0,2]
[0,0,0,3]
.
.
.
[0,1,1,0]
[0,1,1,1]
[0,1,1,2]
[0,1,1,3]
.
.
.
[5,0,2,1]
[5,0,2,2]
etc.
Python有带product函数的itertools,这可以解决我的问题,但它看起来不像Java有类似的功能。递归似乎是前进的方向,但我能找到前进的方向

有人知道如何实现上述输出吗?
提前感谢:-)

从技术上讲,排列意味着某些元素的重新排序,因此,例如,
[3,1,2]
[1,2,3]
的排列。您所要求的相当于在上迭代,因此Python函数被命名为
product


正如您正确地注意到的,这里的方法是递归。这是因为为
[5,3,4,6]
生成所有序列需要为
[3,4,6]
生成所有序列,首先是0,然后是1,依此类推,直到5

导入java.util.array;
公共类卡特尔产品{
公共静态void main(字符串[]args){
printAll(5,3,4,6);
}
公共静态void printAll(int…maxes){
int[]当前=新的int[maxes.length];
printAll(最大值,当前值,0);
}
私有静态void printAll(int[]最大值,int[]当前值,int i){
如果(i==当前长度){
System.out.println(Arrays.toString(current));
}否则{
int max=最大值[i];

对于(int j=0;j我尝试过谷歌搜索,但我发现的解决方案不包括重复项,只创建一组数字的排列。但感谢您向我推荐谷歌,非常有用。欢迎访问stackoverflow.com。请花一些时间阅读,也请阅读。最后,请阅读此可能的重复项,非常感谢!知道这是笛卡尔积而不是置换是很好的。你帮了大忙,也感谢你的代码:-)