顺时针打印矩阵

来源:互联网 发布:php静态计数器 编辑:程序博客网 时间:2024/06/07 04:11

题目

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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.

思路

暴力模拟,用i和j表示当前矩阵的行坐标和列坐标,left,right表示左右边界,up,down表示上下边界,然后按照上边,右边,下边,左边的顺序扫描矩阵的元素,当扫描完一圈之后,把边界缩小一行(列),继续扫描,同时统计当前已经扫描到的元素的个数,当元素全部扫描完之后即可。

参考代码

class Solution {public:    vector<int> printMatrix(vector<vector<int> > matrix) {        int col = matrix.size(), row = matrix[0].size();        int i = 0, j = 0, left = 0, right = row - 1, up = 0, down = col - 1, sum = col * row, cnt = 0;        vector<int> ans;        while (left <= right && up <= down && cnt < sum) {            while (j <= right && cnt < sum) {                cnt++;                ans.push_back(matrix[i][j++]);            }            i++, j--;            while (i <= down && cnt < sum) {                ans.push_back(matrix[i++][j]);                cnt++;            }            i--, j--;            while (j >= left && cnt < sum) {                ans.push_back(matrix[i][j--]);                cnt++;            }            i--, j++;            while (i > up && cnt < sum) {                ans.push_back(matrix[i--][j]);                cnt++;            }            i++, j++;            up++, left++, down--, right--;        }        return ans;    }};
原创粉丝点击