2 回答

TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超8個贊
這應(yīng)該打印出所有排列而不將它們存儲在 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;
}
它將返回真,直到有一個使用它的前突變運(yùn)行此代碼
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貢獻(xiàn)2080條經(jīng)驗(yàn) 獲得超4個贊
您可以將已返回的每個排列存儲在 int[][] 類型的靜態(tài)變量中。如果得到的結(jié)果已經(jīng)在數(shù)組中,則可以進(jìn)行另一個排列。重復(fù)直到你有一個新的排列。但是要小心,如果您想產(chǎn)生比可能更多的排列,這可能會造成無限循環(huán)!
添加回答
舉報