Difficulty :
Medium
Java
演算法Algorithm
撰寫人KVJK_2125Fri, Mar 29, 2024 16:00
原文:Given an m x n matrix mat, return an array of all the elements of the array in a diagonal order.
翻譯:給一個 m x n 的矩陣mat,回一個以對角線遍歷,並包含該陣列所有元素的陣列。
Example 1:
Input: mat = [[1,2,3],[4,5,6],[7,8,9]]
Output: [1,2,4,7,5,3,6,8,9]
Example 2:
Input: mat = [[1,2],[3,4]]
Output: [1,2,3,4]
m == mat.length
n == mat[i].length
1 <= m, n <= 104
1 <= m * n <= 104
-105 <= mat[i][j] <= 105
以Example 1做解釋:
Step1.
先標注出xy軸:
Step2.
記下輸出時的xy順序以及走訪方向:
- 第1次對角線走訪:右上
(0,0)
- 第2次對角線走訪:左下
(0,1)(1,0)
- 第3次對角線走訪:右上
(2,0)(1,1)(0,2)
- 第4次對角線走訪:左下
(1,2)(2,1)
- 第5次對角線走訪:右上
(2,2)
Step3.
發現在第3次時,x走訪順序為2 –> 1 –> 0 由大到小;
而第2、4次時,x走訪順序為0 –> 1 –> 2 由小到大。
建立一個計次變數count = 1
,在奇數次數時,反轉陣列再儲存。
Step4.
要創建兩個ArrayList:
一個用作走訪對角線,並進行判斷反轉;
一個用作儲存可輸出的結果。
Step5.
因為Step3.的'拿取後反轉',可統一走訪方式為'右上至左下'。
及每次走訪路線均為(++, --)
。
Step6.
建立int x = 0
以及int y = 0
:
x會累加至row走訪完,
y會計算至col走訪完。
建立int i = x
以及int j = y
在走訪迴圈內:
用於計算被統一的走訪方式,寫作i++
以及j--
。
當 y > col
時,即 x不會再出現0,
於是x++
,且y = col
並繼續。直到x >= row
且y >= col
。