遍歷對角線 力扣498

2021-10-04 10:34:06 字數 1912 閱讀 1206

給定乙個含有 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...