Leetcode_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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值