- 题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.
- 思路:
- 就像是打印回形针一样哈哈,减而治之的思路,设置一个范围lx rx ty dy
- 每次从左到右,从上倒下,从右到左,从下到上
- 启发或者坑
- 回形针,最后只剩下一行或者一列的时候,应该进行特判【看可不可以处理特殊情况】
- 代码
class Solution { public: vector<int> printMatrix(vector<vector<int> > matrix) { vector<int> res; int x = 0; int y = 0; int lx = 0; int ty = 0; int dy = matrix.size()-1; //矩阵为空特殊处理 if (dy <0) return res; int rx = matrix[0].size()-1; while(lx <= rx && ty<=dy) { //cout << lx << " " << rx << " " <<endl; //cout << ty << " " << dy << " " <<endl; y = ty; x = lx; //这是走了一个回形针,如果只有一行或者只有一列呢 for (x = lx; x < rx; x++) res.push_back(matrix[y][x]); for (y = ty; y < dy; y++) res.push_back(matrix[y][x]); if (ty == dy) { res.push_back(matrix[y][rx]); break; } for (x = rx; x > lx; x--) res.push_back(matrix[y][x]); if (rx == lx) { res.push_back(matrix[dy][rx]); break; } for (y = dy; y > ty; y--) res.push_back(matrix[y][x]); lx++; rx--; ty++; dy--; } return res; } };
剑指offer 20.顺时针打印矩阵
猜你喜欢
转载自blog.csdn.net/Alexia23/article/details/103842833
今日推荐
周排行