19、順時針打印矩陣

題目描述
輸入一個矩陣,按照從外向里以順時針的順序依次打印出每一個數字,例如,如果輸入如下矩陣: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 則依次打印出數字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.

一開始以為是n*n的矩陣,寫出了如下代碼:

import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> printMatrix(int [][] matrix) {
        ArrayList<Integer> list = new ArrayList<>();
        int row = matrix.length;
        int col = matrix[0].length;
        int rowCount = 0;
        int colCount = col-1;
        int revRowCount = row-1;
        int revColCount = 0;
        while(rowCount<=revRowCount&&colCount>=revColCount){
            //打印頂部一行
            for(int i=revColCount; i<=colCount; i++){
                list.add(matrix[rowCount][i]);
            }
            rowCount++;
            
            //打印右側一列
            for(int i=rowCount; i<=revRowCount; i++){
                list.add(matrix[i][colCount]);
            }
            colCount--;
            
            
            //打印底部一行
            for(int i=colCount; i>=revColCount; i--){
                list.add(matrix[revRowCount][i]);
            }
            revRowCount--;         
            
            //打印左側一列
            for(int i=revRowCount; i>=rowCount; i--){
                list.add(matrix[i][revColCount]);
            }
            revColCount++;
        }
        return list;
    }
}

在測試n*1矩陣的時候沒有通過,因為在一次循環時至少打印兩行、兩列。如下代碼加了對矩陣只有一行或只有一列的判斷。

import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> printMatrix(int [][] matrix) {
        ArrayList<Integer> list = new ArrayList<>();
        int row = matrix.length;
        int col = matrix[0].length;
        int rowCount = 0;
        int colCount = col-1;
        int revRowCount = row-1;
        int revColCount = 0;
        while(rowCount<=revRowCount&&colCount>=revColCount){
            //打印頂部一行
            for(int i=revColCount; i<=colCount; i++){
                list.add(matrix[rowCount][i]);
            }
            rowCount++;
            
            //打印右側一列
            for(int i=rowCount; i<=revRowCount; i++){
                list.add(matrix[i][colCount]);
            }
            colCount--;
            
            
            //打印底部一行,先排除只有一行的情況
            if(rowCount>revRowCount){
                break;
            }
            for(int i=colCount; i>=revColCount; i--){
                list.add(matrix[revRowCount][i]);
            }
            revRowCount--;         
            
            //打印左側一列,先排除只有一列的情況
            if(colCount<0){
                break;
            }
            for(int i=revRowCount; i>=rowCount; i--){
                list.add(matrix[i][revColCount]);
            }
            revColCount++;
        }
        return list;
    }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容