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

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

public ArrayList<Integer> printMatrix(int [][] matrix) {
       ArrayList<Integer> l1= new ArrayList<>();
    int i = 0 ;                     //代表橫座標
    int j = 0 ;                     //代表縱座標
    boolean flag1 = false ;         //標誌變數,當向右方向或者向下方向時為false,當向左方向或者向上方向時為true
    boolean flag2 = false ;         //標誌變數,當為false時,橫座標不變縱座標移動,當為true時縱座標不變,橫座標移動
    int t1 = matrix.length;         //求出行數
    int t2 = matrix[0].length;      //求出列數
    int t3 = -1 ;                   //標誌位
    int t4 = 0 ;                    //標誌位
    int count = t1*t2;              //元素總個數
    while(count > 0) {              //當元素沒有新增完,就繼續新增元素
    while( !flag1 ) {               //向右或者向下
        if(count <= 0) {            //如果已經新增完就跳出
            break;
        }
        while( !flag2) {             //向右
            l1.add(matrix[i][j]);  
            count -- ;
            j ++;
        
            if( j == t2 )            //已經把一行新增完,修改標誌變數
                flag2 = true;
        }
        j--;                         //j--,把游標定位回剛剛新增元素的列號
        i++;                         //因為對應i,j的位置已經新增過,所以把i++
        t2 --;                       //下一次同一個方向時,新增元素的數量肯定要減一
        while(flag2) {
            if(count <= 0) {
                break;
            }
            l1.add(matrix[i][j]);
            count --;
            i++;
            if(i == t1) {
                flag2 = false;                //向右向下已經結束,所以把flag1標誌變數也進行修改了
                flag1 = true;
            }    
        }
        t1 --;
        i -- ;
        j --;
    }
    while(flag1) {
        if(count <= 0) {
            break;
        }
        while( !flag2) {
            l1.add(matrix[i][j]);
            count --;
            j --;
        
            if( j == t3 )
                flag2 = true;
        }
        j++;
        t3++;
        i--;
        while(flag2) {
            if(count <= 0) {
                break;
            }
            l1.add(matrix[i][j]);
            count --;
            i--;
            if(i == t4) {
                flag2 = false;
                flag1 = false;
            }    
            
        }
        j ++ ;
        i++;
        t4++;
    }
    }
    return l1;
}