Java中的排列組合(二)

接《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));

        }

    }

組合的問題,明天再說。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章