题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.
解题思路:顺时针打印,服从右下左上的规律,可使用leecode上岛屿的个数思路解决,对访问过的元素设置一个标志值,按照规律访问剩下的数组,注意,顺时针的右下左上中的“右”需要满足一定的条件才可以往右走,此条件为:当前行是第0行,或者上一行已经被遍历过
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| void printMatrixHelper(vector<vector<int> > &matrix, vector<int> &res, int i, int j, int r, int c) { res.push_back(matrix[i][j]); matrix[i][j] = INT_MAX; if (j+1 < c && matrix[i][j+1] != INT_MAX && (i==0 || matrix[i-1][j]==INT_MAX)) printMatrixHelper(matrix, res, i, j+1, r, c); if (i+1 < r && matrix[i+1][j] != INT_MAX ) printMatrixHelper(matrix, res, i+1, j, r, c); if (j-1 >= 0 && matrix[i][j-1] != INT_MAX ) printMatrixHelper(matrix, res, i, j-1, r, c); if (i-1 >= 0 && matrix[i-1][j] != INT_MAX ) printMatrixHelper(matrix, res, i-1, j, r, c); } vector<int> printMatrix(vector<vector<int> > matrix) { vector<int> res; int r = matrix.size(); if (r == 0) return res; int c = matrix[0].size(); printMatrixHelper(matrix, res, 0, 0, r, c); return res; }
|