LeetCode | Spiral Matrix

来源:互联网 发布:寰神结剧情知乎 编辑:程序博客网 时间:2024/05/19 03:46

题目:

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

For example,
Given the following matrix:

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

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


思路:

利用递归的方法,共有如下的两种情况:第一种情况先遍历右上侧面再遍历左下的方形部分;第二种情况先遍历左下侧面再遍历右上的方形部分。侧面与方形部分可以用起始,终止坐标表示。

代码:

class Solution {public:    vector<int> spiralOrder(vector<vector<int> > &matrix) {        if(matrix.size()==0||matrix[0].size()==0)        {            return *(new vector<int>());        }        int x1=0;        int y1=0;        int y2=matrix.size()-1;        int x2=matrix[0].size()-1;        return getOutside(true, x1, y1, x2, y2, matrix);    }        vector<int> getOutside(bool upside, int x1, int y1, int x2, int y2,vector<vector<int> > &matrix)    {        vector<int> r;        if(x1 == x2 && y1 == y2)        {            r.push_back(matrix[y1][x1]);        }        else        {            if(upside)            {                for(int i=x1;i<=x2;i++)                {                    r.push_back(matrix[y1][i]);                }                if(y2>y1)                {                    for(int i=y1+1;i<=y2;i++)                    {                        r.push_back(matrix[i][x2]);                    }                }                int x3 = x2-1;                int y3 = y2;                int x4 = x1;                int y4 = y1+1;                if(x3>=x4 && y3>=y4)                {                    vector<int> tmp = getOutside(!upside, x3, y3, x4, y4,matrix);                    for(int k=0;k<tmp.size();k++)                    {                        r.push_back(tmp[k]);                    }                }            }            else            {                for(int i=x1;i>=x2;i--)                {                    r.push_back(matrix[y1][i]);                }                if(y1>y2)                {                    for(int i=y1-1;i>=y2;i--)                    {                        r.push_back(matrix[i][x2]);                    }                }                int x3 = x2+1;                int y3 = y2;                int x4 = x1;                int y4 = y1-1;                if(x3<=x4 && y3<=y4)                {                    vector<int> tmp = getOutside(!upside, x3, y3, x4, y4,matrix);                    for(int k=0;k<tmp.size();k++)                    {                        r.push_back(tmp[k]);                    }                }            }        }        return r;    }};



0 0
原创粉丝点击