接《Java中的排列組合(一)》
方法int[] delete(int[] a, int i)將數組a中下標爲i的元素刪除,產生一個新的數組返回。因爲在方法permutation中我們要反覆使用數組a,所以數組a的內容不能改變,我們這個delete方法並沒有改變數組a的內容,這與它的名稱有點不相符。
代碼如下:
/**
* @param a 數組
* @param i 將要刪除的元素的下標
* @return 數組a去除下標爲i的元素之後產生的新數組
*/
public static int[] delete(int[] a, int i) {
assert a.length > 0 : "數組不能爲空!";
int[] b = new int[a.length - 1]; // 初始化數組b,長度爲a.length - 1
for (int j = 0, k = 0; k < a.length; k++) {
if (k == i) {
continue;
}
b[j] = a[k];
j++;
}
return b;
}
方法void matrixCopy(int[][] src, int srcRowPoc, int srcColPoc, int[][] dest, int destRowPoc, int destColPoc)從二維數組src中第srcRowPoc行第srcColPoc列開始將剩餘元素複製到二維數組dest中, dest從第destRowPoc行第destColPoc列開始接收數據。
代碼如下:
public static void matrixCopy(int[][] src, int srcRowPoc, int srcColPoc, int[][] dest, int destRowPoc, int destColPoc) {
for (int i = 0; srcRowPoc + i < src.length && destRowPoc + i < dest.length ; i++) {
for (int j = 0; srcColPoc + j < src[i].length && destColPoc + j < dest[j].length; j++) {
dest[destRowPoc + i][destColPoc + j] = src[srcRowPoc + i][srcColPoc + j];
}
}
}
至此,排列問題就基本解決了。下面我們再寫一個方法,用來打印二維數組。
public static void printMatrix(int[][] a) {
for (int[] x : a) {
System.out.println(Arrays.toString(x));
}
}
組合的問題,明天再說。