题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
解题思路:
分析发生方向改变的位置,发现跟圈数可以形成关系,主要考察程序控制能力。
class Solution {
public:
vector<int> printMatrix(vector<vector<int> > matrix) {
int n = matrix.size();
int m = matrix[0].size();
int allNum = n*m;
vector<int> res;
int round = 1;
int i = 0, j = 0;
int iv = 0, jv = 1;
while(allNum > 0){
if(i == round && iv==-1 && jv==0){
//向右走
iv = 0;
jv = 1;
round++;
}else if(j == m-round && iv == 0 && jv == 1){
//向下走
iv = 1;
jv = 0;
}else if(i == n-round && iv == 1 && jv == 0){
//向左走
iv = 0;
jv = -1;
}else if(j == round -1 && iv == 0 && jv == -1){
//向上走
iv = -1;
jv = 0;
}
res.push_back(matrix[i][j]);
allNum--;
i = i + iv;
j = j + jv;
}
return res;
}
};