LeetCode:對角線遍歷:30行代碼最詳細

題目

題目

思路

(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;
    }

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章