LeetCode–對角線周遊
題目:
給定一個含有 M x N 個元素的矩陣(M 行,N 列),請以對角線周遊的順序傳回這個矩陣中的所有元素,對角線周遊如下圖所示
示例
輸入:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
輸出: [1,2,4,7,5,3,6,8,9]
思路
- 判斷矩陣是否為空 為空,則傳回空數組
- 建立一個長度為row*col的數組
- 将矩陣中對應坐标的數字填充入數組
-
判斷層數的奇和偶 奇數層像下走r++,c-- 偶數層向上走r–,c++
本文按照如圖所示的矩陣進行分析:
//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;