Leetcode_spiral-matrix

来源:互联网 发布:聊天室程序源码 编辑:程序博客网 时间:2024/05/15 06:28
地址:http://oj.leetcode.com/problems/spiral-matrix/

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) {        vector<int>res;        if(!matrix.empty())        {            int row = matrix.size(), col = matrix[0].size();            int i = 0, j = 0, tmp = 0, endi = row, endj = col;            while(i <= endi && j <= endj)            {                tmp = j;                if(tmp >= endj)                    break;                while(tmp<endj)                    res.push_back(matrix[i][tmp++]);                ++i;                tmp = i;                if(tmp>=endi)                    break;                while(tmp<endi)                    res.push_back(matrix[tmp++][endj-1]);                --endj;                tmp = endj-1;                if(tmp<j)                    break;                while(tmp>=j)                    res.push_back(matrix[endi-1][tmp--]);                --endi;                tmp = endi-1;                if(tmp<i)                    break;                while(tmp>=i)                    res.push_back(matrix[tmp--][j]);                ++j;            }        }        return res;    }};

//second trail
class Solution {public:    vector<int> spiralOrder(vector<vector<int> > &matrix) {        vector<int> ans;        if(matrix.empty())            return ans;        int row = matrix.size(), col = matrix[0].size();        int ibegin = 0, iend = row-1, jbegin = 0, jend = col-1;        while(ibegin<=iend && jbegin <= jend)        {            for(int j = jbegin; j<=jend; ++j)                ans.push_back(matrix[ibegin][j]);            ++ibegin;                        for(int i = ibegin; i<=iend; ++i)                ans.push_back(matrix[i][jend]);            --jend;                        if(ibegin > iend || jbegin > jend)                break;                        for(int j = jend; j>=jbegin; --j)                ans.push_back(matrix[iend][j]);            --iend;                        for(int i = iend; i>=ibegin; --i)                ans.push_back(matrix[i][jbegin]);            ++jbegin;        }        return ans;    }};


0 0