LeetCode54 螺旋矩阵 2018.4.28

题干:

给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。

示例 1:

输入:
[
 [ 1, 2, 3 ],
 [ 4, 5, 6 ],
 [ 7, 8, 9 ]
]
输出: [1,2,3,6,9,8,7,4,5]

示例 2:

输入:
[
  [1, 2, 3, 4],
  [5, 6, 7, 8],
  [9,10,11,12]
]
输出: [1,2,3,4,8,12,11,10,9,5,6,7]

class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        if (matrix.empty())
            return vector<int>();
        int m = matrix.size(),n = matrix[0].size(),i = 0,j = 0;
        vector<int>result;
        vector<vector<int>>visit(m,vector<int>(n));//申请一个数组,标记元素是否访问过
        int count = m * n;
        while(count)
        {
            while(j < n && visit[i][j] == 0)//向右
            {
                visit[i][j] = 1;
                result.push_back(matrix[i][j++]);
                count--;
            }
            i++,j--;
            while(i < m && visit[i][j] == 0)//向下
            {
                visit[i][j] = 1;
                result.push_back((matrix[i++][j]));
                count--;
            }
            i--,j--;
            while(j >= 0 && visit[i][j] == 0)//向左
            {
                visit[i][j] = 1;
                result.push_back(matrix[i][j--]);
                count--;
            }
            i--,j++;
            while(i >=0 && visit[i][j] == 0)//向上
            {
                visit[i][j] = 1;
                result.push_back(matrix[i--][j]);
                count--;
            }
            i++,j++;
            n--,m--;
        }
        return result;
    }
};

猜你喜欢

转载自blog.csdn.net/jerseywwwwei/article/details/80115670