天天看點

對角線周遊LeetCode–對角線周遊

LeetCode–對角線周遊

題目:

給定一個含有 M x N 個元素的矩陣(M 行,N 列),請以對角線周遊的順序傳回這個矩陣中的所有元素,對角線周遊如下圖所示

示例

輸入:
[
 [ 1, 2, 3 ],
 [ 4, 5, 6 ],
 [ 7, 8, 9 ]
]

輸出:  [1,2,4,7,5,3,6,8,9]
           

思路

  1. 判斷矩陣是否為空 為空,則傳回空數組
  2. 建立一個長度為row*col的數組
  3. 将矩陣中對應坐标的數字填充入數組
  4. 判斷層數的奇和偶 奇數層像下走r++,c-- 偶數層向上走r–,c++

    本文按照如圖所示的矩陣進行分析:

    對角線周遊LeetCode–對角線周遊
//1.判斷矩陣是否為空  為空,則傳回空數組
        if(matrix == null || matrix.length == 0){
            return new int[]{};
        }
        int r = 0, c = 0;
        int row = matrix.length, col = matrix[0].length;
        //建立一個長度為row*col的數組
        int[] res = new int[row * col];
        for(int i = 0; i < res.length; i++){
            //将矩陣中對應坐标的數字填充入數組
            res[i] = matrix[r][c];
            //判斷層數的奇和偶    奇數層像下走r++,c--   偶數層向上走r--,c++
            if((r + c) % 2== 0){
                if(c == col - 1){
                    //往下移動一格準備向下周遊
                    r++;
                }else if(r == 0){
                    //往右移動一格準備向下周遊
                    c++;
                }else{
                    //往上移動
                    r--;
                    c++;
                }
            }else{
                if(r == row - 1){
                    // 往右移動一格準備向上周遊
                    c++;
                }else if (c == 0) {
                    // 往下移動一格準備向上周遊
                    r++;
                } else {
                    // 往下移動
                    r++;
                    c--;
                }
            }
        }
        return res;