顺时针打印矩阵
题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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; } };
学学学 练练练 刷刷刷