2 回答
TA贡献1757条经验 获得超8个赞
这应该打印出所有排列而不将它们存储在 HashMap 或列表中
public static boolean nextPermutationArray(int[] a) {
int i = a.length - 2;
while (i >= 0 && a[i] >= a[i + 1]) {
i--;
}
if (i < 0) {
return false;
}
int j = a.length - 1;
while (a[i] >= a[j]) {
j--;
}
int t = a[i];
a[i] = a[j];
a[j] = t;
Collections.reverse(Arrays.asList(Arrays.copyOfRange(a, i + 1, a.length)));
return true;
}
它将返回真,直到有一个使用它的前突变运行此代码
public static void main(String[] args) {
int[] a = new int[]{0, 1, 2, 3};
do {
System.out.println(Arrays.toString(a));
} while (nextPermutationArray(a));
}
输出是
[0, 1, 2, 3]
[0, 1, 3, 2]
[0, 2, 3, 1]
[0, 3, 2, 1]
[1, 3, 2, 0]
[2, 3, 1, 0]
[3, 2, 1, 0]
TA贡献2080条经验 获得超4个赞
您可以将已返回的每个排列存储在 int[][] 类型的静态变量中。如果得到的结果已经在数组中,则可以进行另一个排列。重复直到你有一个新的排列。但是要小心,如果您想产生比可能更多的排列,这可能会造成无限循环!
添加回答
举报