LeetCode-Spiral Matrix-螺旋矩阵

https://oj.leetcode.com/problems/spiral-matrix/

题目没难度,就是循环把每一层的螺旋打印出来即可。需要注意每次螺旋大小缩小2,计算相应的位置并考虑左边界等于右边界的情况。

class Solution {
public:
	int n,m;
	int cn,cm;
	vector <int> tot;
	vector<vector<int> > matrix;
	void Print(){
		int l=(m-cm)/2;
		int u=(n-cn)/2;
		int r=m-l-1;
		int d=n-l-1;
		
		if (l==r){
		    for (int i=u;i<=d;i++){
		        tot.push_back(matrix[i][l]);
		    }
		    return;
		}
		if (u==d){
		    for (int i=l;i<=r;i++){
		        tot.push_back(matrix[u][i]);
		    }
		    return;
		}
		
		for (int i=l;i<r;i++){
			tot.push_back(matrix[u][i]);
		}
		for (int i=u;i<d;i++){
			tot.push_back(matrix[i][r]);
		}
		for (int i=r;i>l;i--){
			tot.push_back(matrix[d][i]);
		}
		for (int i=d;i>u;i--){
			tot.push_back(matrix[i][l]);
		}
	}
	vector<int> spiralOrder(vector<vector<int> > &matrix) {
		this->matrix=matrix;
		n=matrix.size();
		if (n==0){return tot;}
		m=matrix[0].size();
		if (m==0){return tot;}
		cn=n;
		cm=m;
		while(cn>0 && cm>0){
			Print();
			cn-=2;
			cm-=2;
		}
		return tot;
	}
};

  

posted @ 2014-10-06 02:18  zombies  阅读(136)  评论(0编辑  收藏  举报