185矩陣的之字形遍歷

給你一個包含 m x n 個元素的矩陣 (m 行, n 列), 求該矩陣的之字型遍歷。

樣例

對於如下矩陣:

[
  [1, 2,  3,  4],
  [5, 6,  7,  8],
  [9,10, 11, 12]
]

返回 [1, 2, 5, 9, 6, 3, 4, 7, 10, 11, 8, 12]

只有在邊界上纔有可能向下或向右,而且其下標有規律。其它情況是右上或左下,同樣行列座標和也有規律。

class Solution {
public:
    /**
     * @param matrix: a matrix of integers
     * @return: a vector of integers
     */
    vector<int> printZMatrix(vector<vector<int> > &matrix) {
        // write your code here
        int m = matrix.size();
        int n = matrix[0].size();
        vector<int> ret;
        ret.reserve(m*n);
        
        if(m==1)
            return matrix[0];
        /*else if(n==1)
        {
            for(int i=0; i<m;i++)
                ret.push_back(matrix[i][0]);
                
            return ret;
        }*/
           
            int i=0, j=0;
            while(i>=0 && i<m && j>=0 && j<n)
            {
                ret.push_back(matrix[i][j]);
                if( (j!=n-1) && ((i==0 && !(j&1)) || (i==m-1 && (i+j)&1 )) )//right
                    j++;
                else if( (j==0 && (i&1)) || (j==n-1 && !((i+j)&1)) )//down
                    i++;
                    
                else if(!((i+j)&1))//右上
                {
                    j++;
                    i--;
                }
                else if((i+j)&1)//左下
                {
                    i++;
                    j--;
                }
            }
            
        return ret;
    }
};


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