思路:
初始时int left = 0, right = cols - 1, top = 0, bottom = rows - 1;
先从左到右,再从上到下,再从右到左(有条件,防止行向量),再从下到上遍历(有条件,防止列向量)。最后left++;right--;top++;bottom--;
;
重复进行上述4步,直到left>right || top>bottom
结束程序。
#include<iostream>
#include<vector>
#include<iterator>
using namespace std;
// 1 2 3 4
// 5 6 7 8
// 9 10 11 12
class Solution {
public:
vector<int> printmatrix(vector<vector<int>>& matrix) {
if (matrix.size() == 0)
return{};
int rows = matrix.size();
int cols = matrix[0].size();
vector<int>res;
int left = 0, right = cols - 1, top = 0, bottom = rows - 1;
while (left <= right&&top <= bottom)
{
//从左到右
for (int i = left; i <= right; i++)
res.push_back(matrix[top][i]);
//从上到下
for (int i = top + 1; i <= bottom; i++)
res.push_back(matrix[i][right]);
//从右到左(有条件,防止行向量的情况)
if (top != bottom)
for (int i = right - 1; i >= left; i--)
res.push_back(matrix[bottom][i]);
//从下到上(有条件,防止列向量的情况)
if (left != right)
for (int i = bottom - 1; i >= top + 1; i--)
res.push_back(matrix[i][left]);
//一轮结束,更新状态
left++;
right--;
top++;
bottom--;
}
return res;
}
};
int main() {
vector<vector<int>>matrix;
vector<int>a;
a.push_back(1); a.push_back(2); a.push_back(3); a.push_back(4);
vector<int>b;
b.push_back(5); b.push_back(6); b.push_back(7); b.push_back(8);
vector<int>c;
c.push_back(9); c.push_back(10); c.push_back(11); c.push_back(12);
matrix.push_back(a); matrix.push_back(b); matrix.push_back(c);
Solution solution;
vector<int>result = solution.printmatrix(matrix);
copy(result.begin(), result.end(), ostream_iterator<int>(cout, " "));
system("pause");
return 0;
}
测试例子:
// 1 2 3 4
// 5 6 7 8
// 9 10 11 12