[LeetCode] Spiral Matrix

来源:互联网 发布:阿里云 ssh 断开 编辑:程序博客网 时间:2024/04/28 16:57

Given a matrix of m x n elements (m rows, ncolumns), return all elements of the matrix in spiral order.

 

For example,

Given the following matrix:


You should return [1,2,3,6,9,8,7,4,5].

 

分析:

         一圈一圈遍历,注意最后只剩单行或者单列的情况。

代码如下:

class Solution {public:    vector<int> spiralOrder(vector<vector<int> > &matrix) {        vector<int> v;        if (matrix.empty())            return v;        int m = matrix.size();        int n = matrix[0].size();        int up = 0;        int down = m - 1;        int left = 0;        int right = n - 1;        while (up < down && left < right) {            for (int i = left; i <= right; ++i) {                v.push_back(matrix[up][i]);            }            for (int i = up + 1; i <= down; ++i) {                v.push_back(matrix[i][right]);            }                        for (int i = right - 1; i >= left; --i) {                v.push_back(matrix[down][i]);            }            for (int i = down - 1; i >= up + 1; --i) {                v.push_back(matrix[i][left]);            }            up++;            down--;            left++;            right--;        }        if (down > up && right == left) {            for (int i = up; i <= down; ++i) {                v.push_back(matrix[i][left]);            }        }        else if (right >= left && up == down) {            for (int i = left; i <= right; ++i) {                v.push_back(matrix[up][i]);            }        }        return v;            }};

0 0
原创粉丝点击