[Java Code]順時針輸出二維數組

package com.coding_sloth;

/**
 * 順時針打印矩陣
 * example:有如下矩陣:
 *      1   2   3   4   5
 *      14  15  16  17  6
 *      13  20  19  18  7
 *      12  11  10   9  8
 * 輸出結果爲:1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20
 * Created by 孔武有力 on 14-3-28.
 */
public class Clockwise2DArray {
    public void test() {
        int[][] array = {{1, 2, 3, 4, 5}, {14, 15, 16, 17, 6},
                {13, 20, 19, 18, 7}, {12, 11, 10, 9, 8}};
        /*
        int[][] array = {{1, 2, 3, 4}, {12, 13, 14, 5},
                {11, 16, 15, 6}, {10, 9, 8, 7}};
        /*
        int[][] array = {{1, 2, 3}, {8, 9, 4}, {7, 6, 5}};
        */
        int[] result = clockwise2DArray(array, 4, 5);
        for(int a : result) {
            System.out.print(a + " ");
        }
    }
    //M爲數組array的行數,N爲列數
    private int[] clockwise2DArray (int[][] array, int M, int N){
        int[] result = new int[M*N];
        int count = 1;  //圈數
        int k = 0; //result[] 下標
        while(count <= (min(M, N)+1)/2)
        {
            //從左到右橫向打印
            for (int i = count - 1; i < N - count; i ++) {
                result[k] = array[count - 1][i];
                k ++;
            }
            //從上到下縱向打印
            for (int i = count - 1; i < M - count; i ++) {
                result[k] = array[i][N - count];
                k++;
            }
            //從右到左橫向打印
            for (int i = N - count; i > count - 1; i --) {
                result[k] = array[M - count][i];
                k++;
            }
            //從下到上縱向打印
            for (int i = M - count; i > count - 1; i --) {
                result[k] = array[i][count - 1];
                k++;
            }
            count ++;
        }
        /* 當最後一圈只有一個元素[如3*3數組]時,上述循環不會執行,
         * 需將最後一個元素插入到數組result中
        */
        if (k < M*N) {
            result[k] = array[count - 2][count - 2];
        }
        return result;
    }

    private int min(int a, int b) {
        return (a>b) ? b : a;
    }
}

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