依次打印外层,然后打印里层;
当处理里层的边界问题时,比如只有一列时,出现了一点问题,于是就多了几句判断条件
class Solution {
public:
void c_clock_wise(vector<int> &_print, vector<vector<int>>& matrix, int lo_row, int lo_col, int hi_row, int hi_col,int &cur)
{
int C = matrix[0].size();
int my_row = lo_row;
int my_col = lo_col;
if(lo_row<hi_row&&lo_col<hi_col)
{
while (my_col < hi_col)
{
_print[cur++] = matrix[my_row][my_col];
my_col++;
}
while (my_row < hi_row)
{
_print[cur++] = matrix[my_row][my_col];
my_row++;
}
while (my_col > lo_col)
{
_print[cur++] = matrix[my_row][my_col];
my_col--;
}
while (my_row > lo_row)
{
_print[cur++] = matrix[my_row][my_col];
my_row--;
}
}
else
{
while (my_col <= hi_col)
{
_print[cur++] = matrix[my_row][my_col];
my_col++;
}
my_col--;
my_row++;
while (my_row <= hi_row)
{
_print[cur++] = matrix[my_row][my_col];
my_row++;
}
}
}
vector<int> spiralOrder(vector<vector<int>>& matrix) {
if(matrix.empty()) return vector<int>();
int R = matrix.size();
int C = matrix[0].size();
vector<int> _pp(R*C);
int c = 0, r = 0;
int cur = 0;
while ((c < C--) && (r < R--))
{
c_clock_wise(_pp, matrix, r, c, R, C,cur);
++c, ++r;
}
return _pp;
}
};