給定乙個含有 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,4;3,5,7…
由題意分析得,當第奇數個對角線遍歷時,其為反向輸出,我們可以先將其正向遍歷出來,再反轉
最後將所有得到的對角線存入結果陣列中即可
得到二維陣列的長度,建立結果陣列
int n = matrix.length;
//記錄縱座標
int m = matrix[0]
.length;
//記錄橫座標
//宣告結果陣列
res =
newint
[m * n]
;
確定所有對角線的起點座標,進行迴圈,對角線起點應該為第一行所有以及最後一列所有
for
(int i =
0; i < m + n -
1; i++
)for
(int i =
0; i < list.
size()
; i++
)return res;
}
將起點座標找到後,正向便利對角線元素,即橫座標向左移動乙個單位,縱座標向下移動乙個單位
public list
get(int
matrix,
int x,
int y,
int i)
//否則在res中記錄當前橫縱座標的數
res.
add(matrix[x]
[y])
; x = x +1;
y = y -1;
}if(i %2==
0)return res;
}
當執行到第奇數個起點時,反轉鍊錶,對應到**中,i從0開始,所以當i對2取模為0時,將結果反轉。
儲存對角線元素可以使用動態陣列儲存,最後將其加在陣列中即可
class
solution
int n = matrix.length;
//記錄縱座標
int m = matrix[0]
.length;
//記錄橫座標
//宣告結果陣列
res =
newint
[m * n]
; list
list =
newarraylist
();//遍歷得到對角線起點
for(
int i =
0; i < m + n -
1; i++
) res = list.
toarray()
;for
(int i =
0; i < list.
size()
; i++
)return res;
}public list
get(int
matrix,
int x,
int y,
int i)
//否則在res中記錄當前橫縱座標的數
res.
add(matrix[x]
[y])
; x = x +1;
y = y -1;
}if(i %2==
0)return res;
}}
力扣498 對角線遍歷c語言
題目 給定乙個含有 m x n 個元素的矩陣 m 行,n 列 請以對角線遍歷的順序返回這個矩陣中的所有元素,對角線遍歷如下圖所示。示例 輸入 1,2,3 4,5,6 7,8,9 輸出 1,2,4,7,5,3,6,8,9 說明 給定矩陣中的元素總數不會超過 100000 解釋 當橫縱座標和為基數時,往...
Leetcode 498 對角線遍歷
給定乙個含有 m x n 個元素的矩陣 m 行,n 列 請以對角線遍歷的順序返回這個矩陣中的所有元素,對角線遍歷如下圖所示。示例 輸入 1,2,3 4,5,6 7,8,9 輸出 1,2,4,7,5,3,6,8,9 解釋 說明 給定矩陣中的元素總數不會超過 100000 在真實的面試中遇到過這道題?這...
leetcode498 對角線遍歷
給定乙個含有 m x n 個元素的矩陣 m 行,n 列 請以對角線遍歷的順序返回這個矩陣中的所有元素。這題的兩個要點 1.對下標的五種情況的判斷 2.對傳入的二維陣列是 空陣列,單行陣列,單列陣列的處理 class solution int arr null 只有一行的情況 if matrix.le...