1. 程式人生 > >劍指Offer—順時針列印矩陣

劍指Offer—順時針列印矩陣

順時針列印舉證

題目

解題思路:依次讀取上邊框、右邊框、下邊框、左邊框。讀取之後行列變數進行改變。

題目圖片
/**
 * 依次讀取上邊框、右邊框、下邊框、左邊框
 * 讀取之後行列變數進行改變
 * @param matrix
 * @return
 */
public ArrayList<Integer> printMatrix(int [][] matrix) {
    ArrayList<Integer> result = new ArrayList<>();
    int rowStart = 0,rowEnd = matrix.length-1,colStart = 0,colEnd = matrix[0].length-1;
    while (rowStart<=rowEnd&&colStart<=colEnd){
        //讀取上邊框
        for (int i = colStart; i <= colEnd; i++) {
            result.add(matrix[rowStart][i]);
        }
        //讀取右邊框
        for (int i = rowStart+1; i <= rowEnd ; i++) {
            result.add(matrix[i][colEnd]);
        }

        //杜絕只有一行的情況
        if (rowStart!=rowEnd){
            //讀取下邊框
            for (int i = colEnd-1; i >= colStart ; i--) {
                result.add(matrix[rowEnd][i]);
            }
        }

        //杜絕只有一列的矩陣出現重讀
        if (colStart!=colEnd){
            //讀取左邊框
            for (int i = rowEnd-1; i >rowStart; i--) {
                result.add(matrix[i][colStart]);
            }
        }


        rowStart++;rowEnd--;colStart++;colEnd--;
    }
    return result;
}