leetcode54 Spiral Matrix
问题描述
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.
解题思路
问题的意思是,给一个m*n的矩阵,输出矩阵的顺时针序列。这个问题就是一层一层来,但是有一点需要注意,当m和n不相等的时候,最后有可能陷入最后一层只有一行或一列的情况,这时候需要特殊处理
代码
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int> rtn;
if(matrix.empty()||matrix[0].empty())
return rtn;
int m=matrix.size();
int n=matrix[0].size();
int nval=(min(m,n)+1)/2;
for(int i=0;i<nval;i++){
int ml=m-1-i;
int nl=n-1-i;
if(ml==i){
for(int j=i;j<=nl;j++)
rtn.push_back(matrix[i][j]);
}
else if(nl==i){
for(int j=i;j<=ml;j++)
rtn.push_back(matrix[j][i]);
}
else{
for(int j=i;j<nl;j++)
rtn.push_back(matrix[i][j]);
for(int j=i;j<ml;j++)
rtn.push_back(matrix[j][nl]);
for(int j=nl;j>i;j--)
rtn.push_back(matrix[ml][j]);
for(int j=ml;j>i;j--)
rtn.push_back(matrix[j][i]);
}
}
return rtn;
}
};
leetcode59 Spiral Matrix II
问题描述
Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.
解题思路
和上一题类似,仍然是一层一层的输入。当最后一层只有一个数字的时候,需进行特殊处理
代码
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int> >rtn(n,vector<int>(n,0));
int nval=(n+1)/2;
int k=1;
for(int i=0;i<nval;i++){
int nl=n-1-i;
for(int j=i;j<nl;j++)
rtn[i][j]=k++;
for(int j=i;j<nl;j++)
rtn[j][nl]=k++;
for(int j=nl;j>i;j--)
rtn[nl][j]=k++;
for(int j=nl;j>i;j--)
rtn[j][i]=k++;
}
if(n%2==1)
rtn[n/2][n/2]=n*n;
return rtn;
}
};