顺时针打印矩阵
2016-10-05 17:52
211 查看
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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.
这个像极了我们常见的一种旋转矩阵:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
我的解题思路一贯的简单粗暴,既然是旋转的,那总离不了上下左右四个方向,大不了我就写复杂些,把你的所有旋转情况全部涵盖。
vector<int> printMatrix(vector<vector<int> > matrix) { size_t width = matrix[0].size(); size_t height = matrix.size(); vector<int> res; int flags[height][width]; size_t i = 0; size_t j = -1; for(i = 0;i < height;++i) { for(j = 0; j < width; ++j) flags[i][j] = 0; } enum DIR{DIR_UP,DIR_DOWN,DIR_LEFT,DIR_RIGHT} dir; dir = DIR_RIGHT; int count = 0; i = 0, j = -1; while(true) { switch(dir) { case DIR_UP: res.push_back(matrix[--i][j]); if(i == 0 || flags[i-1][j] == 1) dir = DIR_RIGHT; break; case DIR_DOWN: res.push_back(matrix[++i][j]); if(i+1 == height || flags[i+1][j] == 1) dir =DIR_LEFT; break; case DIR_LEFT: res.push_back(matrix[i][--j]); if(j == 0 || flags[i][j-1] == 1) dir = DIR_UP; break; case DIR_RIGHT: res.push_back(matrix[i][++j]); if(j+1 == width || flags[i][j+1] == 1) dir = DIR_DOWN; break; } flags[i][j] = 1; ++count; if(count == width * height) break; } return res; }
粗暴得让我自己都汗颜!!
相关文章推荐
- 面试题40:顺时针打印矩阵
- 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,
- 剑指offer: 顺时针打印矩阵
- 顺时针打印矩阵
- 剑指Offer----面试题20:顺时针打印矩阵
- 顺时针打印矩阵
- 【剑指offer】面试题29:顺时针打印矩阵
- 剑指offer 之 顺时针打印矩阵
- 【剑指offer——JAVA实现】顺时针打印矩阵(含思路解答示意图)
- 顺时针打印矩阵
- 剑指offer-20:顺时针打印矩阵
- 顺时针打印矩阵(面试宝典)
- 顺时针打印矩阵
- 面试题20:顺时针打印矩阵
- 面试题18:顺时针打印矩阵
- 【追求进步】顺时针打印矩阵【继续理解】
- [遇见时光]剑指offer-顺时针打印矩阵java
- 九度 题目1391:顺时针打印矩阵
- 将矩阵顺时针打印出来
- 【剑指offer】顺时针打印矩阵