[LeetCode] Spiral Matrix 螺旋输出矩阵

Question: 
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].

Solution:

class Solution {
public:
    vector<int> result;
    vector<int> spiralOrder(vector<vector<int> > &matrix) 
    {
        // IMPORTANT: Please reset any member data you declared, as
        // the same Solution instance will be reused for each test case.
        vector<int> result;
        if(matrix.empty()) return result;
        int xBeg=0, xEnd = matrix.size() - 1;
        int yBeg=0, yEnd = matrix[0].size() - 1;
        while(true)
        {
            for(int i = yBeg; i <= yEnd; i++)
            {
                result.push_back(matrix[xBeg][i]);
            }
            if(++xBeg > xEnd) break;
            for(int i = xBeg; i <= xEnd; i++)
            {
                result.push_back(matrix[i][yEnd]);
            }
            if(--yEnd < yBeg) break;
            for(int i = yEnd; i >= yBeg; i--)
            {
                result.push_back(matrix[xEnd][i]);
            }
            if(--xEnd < xBeg) break;
            for(int i = xEnd; i >= xBeg; i--)
            {
                result.push_back(matrix[i][yBeg]);
            }
            if(++yBeg > yEnd) break;
        }
        return result;
    }
};

另外自己又用递推实现了一下,VC 6.0完美运行,但是LeetCode总是提示对于case[[2,3]]有误,不明原因,但是在VC上答案正确,久思不得其解,不知有人知道原因否? 代码如下:

#include <iostream>
#include <vector>
using namespace std;

vector<int> result;

vector<int> spiralOrder(vector<vector<int> > &matrix) 
{
    // IMPORTANT: Please reset any member data you declared, as
    // the same Solution instance will be reused for each test case.
    vector<int>::size_type len = matrix.size();
    if(len == 0) return result;
    vector<int>::size_type w = matrix[0].size();
    if(w == 0) return result;

    vector<int> first = *(matrix.begin());
    vector<int> last = *(matrix.end() - 1);
    for (vector<int>::iterator it = first.begin(); it != first.end(); it++)
    {
        result.push_back(*it);
    }
    if(len > 1)
    {
    	for (vector<vector<int> >::iterator it1 = matrix.begin() + 1; it1 != matrix.end() - 1; it1++)
    	{
    		result.push_back(*((*it1).end()-1));
    	}
    
        if(last.size() >= 1)
        {
        	for (vector<int>::iterator it2 = last.end() - 1; it2 != last.begin(); it2--)
        	{
        		result.push_back(*it2);
        	}
        }
        
    	for (vector<vector<int> >::iterator it3 = matrix.end() - 1; it3 != matrix.begin(); it3--)
    	{
    		result.push_back(*((*it3).begin()));
    	}
    }
    matrix.erase(matrix.begin());
    if(matrix.size() >= 1 )
    {
    	matrix.erase(matrix.end() - 1);
    	if(matrix.size() >= 1)
    	{
        	for (vector<vector<int> >::iterator it4 = matrix.begin(); it4 != matrix.end(); it4++)
        	{
        		if((*it4).size() >= 1){
        		(*it4).erase((*it4).begin());}
        		if((*it4).size() >= 1){
        		(*it4).erase((*it4).end() - 1);}
        	}
    	}
    }
    spiralOrder(matrix);
    return result;
}

int main()
{
	vector<vector<int> > matrix;
	vector<int> tem1, tem2, tem3,tem4;
	tem1.push_back(1); tem1.push_back(2); tem1.push_back(3);
	tem2.push_back(4); tem2.push_back(5); tem2.push_back(6);
	tem3.push_back(7); tem3.push_back(8); tem3.push_back(9);
	tem4.push_back(10); tem4.push_back(11); tem4.push_back(12);
	matrix.push_back(tem1); matrix.push_back(tem2); matrix.push_back(tem3);matrix.push_back(tem4);

	vector<int> res = spiralOrder(matrix);
	
	for (vector<int>:: iterator it = res.begin(); it != res.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;

	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值