题目见此链接
简单说一下思路:打印总共可分为四部,从左往右,从上到下,从右往左,从下到上。执行完这四步后,相当于对原矩阵剥了一层皮,可看成一个新的待打印矩阵。然后重复执行上述四步
class Solution {
public:
//如果只是输出打印数字的话,用递归方式更好
vector<int> printMatrix(vector<vector<int> > matrix) {
int Col = matrix[0].size();//矩阵有多少列
int Row = matrix.size();//矩阵有多少行
vector<int>result;//输出矩阵
//下标
int index_row = 0;
int index_col = 0;
int circleCount = 1;//计算打印的圈数
//空矩阵
if(Col == 0 || Col == 0)
return result;
//矩阵存在且至少有两行两列
while(index_row < Row - 1 && index_col < Col - 1)
{
//打印从左往右的数据
for(;index_col < Col - 1;index_col ++)
{
result.push_back(matrix[index_row][index_col]);
}
//打印从上往下的数据
for(;index_row < Row - 1;index_row ++)
{
result.push_back(matrix[index_row][index_col]);
}
//打印从右往左的数据
for(;index_col >= circleCount; index_col --)
{
result.push_back(matrix[index_row][index_col]);
}
for(;index_row >= circleCount ; index_row --)
{
result.push_back(matrix[index_row][index_col]);
}
index_row ++;
index_col ++;
Col --;
Row --;
circleCount ++;
}
//处理只有一行(列)的情况
if(Col - 1 == index_col)//唯一列
{
for(;index_row < Row;index_row ++)
{
result.push_back(matrix[index_row][index_col]);
}
return result;
}else if(Row - 1 == index_row)//唯一行
{
for(;index_col < Col;index_col ++)
{
result.push_back(matrix[index_row][index_col]);
}
return result;
}else//此时为空
return result;
}
};