题目:

给你一个包含 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: An array of integers
     * @return: An array of integers
     */
    vector<int> printZMatrix(vector<vector<int>> &matrix) {
        /*write your code here*/
        vector<int> res;
        if(matrix.empty())  return res;
        int m = matrix.size();
        /*if(m == 0)  return res;*/
        int n = matrix[0].size();
        /*if(n == 0) return res;*/
        res.push_back(matrix[0][0]);
        int i=1; //记录矩阵个数
        int row=0; //记录行
        int col=0; //记录列
        
        while(i < n*m){
            while(row-1>=0 && col+1<n){
                res.push_back(matrix[--row][++col]); //表示左上的走法
                i++;
            }
            if(col+1 < n){
                res.push_back(matrix[row][++col]); //表示向右平移一步的走法
                i++;
            }
            else if(row+1 < m){
                res.push_back(matrix[++row][col]); //向下移动一步的走法
                i++;
            }
            
            while(row+1<m && col-1>=0){
                res.push_back(matrix[++row][--col]); //表示右下的走法
                i++;
            }
            if(row+1<m){
                res.push_back(matrix[++row][col]); //表示向下移动一步的走法
                i++;
            }
            else if(col+1<n){
                res.push_back(matrix[row][++col]); //表示向右平移一步的走法
                i++;
            }
        }
        return res;
    }
};

wydong
40 声望5 粉丝

wyd


« 上一篇
矩阵归零
下一篇 »
螺旋矩阵