題目
思路
(0-2=3行)M=2,N=3(0~3=4列);
i
(0-5)
記住j
是行,k
是列;
matrix[j][k]
:爲偶數爲紅色;奇數爲藍色(外循環i
)- 偶數(紅色):j=M; j–; k++;(當k<=N&&j>=0)
- 奇數(藍色):j=0; j++;k–; (當j<=M && k>=0)
- 並且因爲
j+k === i
注意上圖藍色與紅色的箭頭:沒有畫錯;和<=N 和<=M有關,有部分是沒有的。
最後附上代碼:
vector<int> findDiagonalOrder(vector<vector<int>>& matrix) {
vector<int> res;
if(matrix.empty())return res;
int M = matrix.size() - 1, N = matrix[0].size() - 1, num;
for (int i = 0; i < N + M + 1; i++) {
if (i & 1) {//奇數
int j = 0, k = i - j;
while (j <= M && k>=0) {
if (k > N) { --k; ++j; continue; }
res.push_back(matrix[j][k]);
++j;
--k;
}
}
else {
int j = M, k = i - M;
while (k <= N && j>=0) {
if (k < 0) { k++; --j; continue; }
res.push_back(matrix[j][k]);
--j;
k++;
}
}
}
return res;
}