劍指offer-20:順時針打印矩陣

思路

因爲是自己想的笨辦法,所以代碼不優雅哈
1. 設置變量cur表示每次移動方向,初始化爲1,每次與4取餘表示方向;
2. 在每個方向遍歷過程中注意橫縱座標邊界與cur之間的變化;
3. 循環終止條件爲集合res保存個數等於總個數。

代碼

 public ArrayList<Integer> printMatrix(int [][] matrix) {
       int row = matrix.length;
        int col = matrix[0].length;
        ArrayList<Integer> res = new ArrayList<Integer>();
        // 注意判斷條件爲小於;
        // 設置 cur表示掃描方向,初始化爲1,爲0不合適,因爲每個方向遍歷時跟其有關
        int i = 0, j = 0, cur = 1;
        while(res.size() < row * col){
            if(cur % 4 == 1){
                while(j <= col-1 - cur/4){
                    res.add(matrix[i][j]);
                    if(j == col-1 - cur/4){
                        i++;
                        cur++;
                        break;
                    }
                    j++;
                }
            }

            if(cur % 4 == 2){
                while (i <= row - 1 - cur/4){
                    res.add(matrix[i][j]);
                    if(i == row - 1 - cur/4){
                        j--;
                        cur++;
                        break;
                    }
                    i++;

                }
            }

            if(cur % 4 == 3){
                while(j >= cur/4){
                    res.add(matrix[i][j]);
                    if(j == cur/4){
                        i--;
                        cur++;
                        break;
                    }
                    j--;
                }
            }

            if(cur % 4 == 0){
                while (i >= cur/4){
                    res.add(matrix[i][j]);
                    if(i == cur/4){
                        j++;
                        cur++;
                        break;
                    }
                    i--;
                }
            }
        }



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