54. 螺旋矩阵

题目描述

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> ret;
    	if(matrix.size()==0 || matrix[0].size() == 0)
    		return ret;
    	int m = matrix.size();
    	int n = matrix[0].size();    
        int circles=min(m,n)/2;
        for(int i=0;i<circles;i++)
        {   
        	//为了统一,这里分配打印每条边的点时,统一为起始点分配到这条边,末尾点不分配到这条边
            for(int j=i;j<n-1-i;j++)
                ret.push_back(matrix[i][j]);
            for(int j=i;j<m-1-i;j++)
                ret.push_back(matrix[j][n-1-i]);
            for(int j=n-1-i;j>i;j--)
                ret.push_back(matrix[m-1-i][j]);
            for(int j=m-1-i;j>i;j--)
                ret.push_back(matrix[j][i]);
        }
        //余数为1,打印一条其中一条边长为1(m,n中的最小部分构成)的长条(另一条边为m,n中的最大部分构成)
        if(min(m,n)%2)
        {          
            if(m>n)
            {          
               for(int j=circles;j<=m-1-circles;j++)
                  ret.push_back(matrix[j][circles]);
            }
            else
            {          
            	for(int j=circles;j<=n-1-circles;j++)
            		ret.push_back(matrix[circles][j]);
            }
 
        }

        return ret;
    }
};

posted on 2021-04-05 18:36  朴素贝叶斯  阅读(31)  评论(0编辑  收藏  举报

导航