nowcoder-顺时针打印矩阵-模拟魔方逆时针旋转

来源:互联网 发布:网站机器人源码 编辑:程序博客网 时间:2024/05/19 18:12

题目

顺时针打印矩阵

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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   45   6   7   89   10  11  12  13  14  15  16

思想

首先将第一行打印,并删除第一行

5   6   7   89   10  11  1213  14  15  16

将矩阵逆时针旋转

8   12  167   11  156   10  145   9   13

将第一行打印,删除第一行
….
重复上述步骤,直到剩余矩阵为空。


代码

class Solution {public:    vector<int> printMatrix(vector<vector<int> > matrix) {        while(!matrix.empty()){                        //判断剩余矩阵是否为空            for(int i = 0; i < matrix[0].size(); i++){                ans.push_back(matrix[0][i]);           //输出第一行            }            matrix.erase(matrix.begin());              //删除第一行            temp = Contrarotate(matrix);               //逆时针旋转矩阵            matrix.clear();            matrix = temp;        }        return ans;    }    vector<vector<int> > Contrarotate(vector<vector<int> > matrix){        vector<vector<int> > vec;                                       if(matrix.empty())return vec;        int m = matrix.size(), n = matrix[0].size();        vec.resize(n);                                   //初始化旋转后的矩阵的大小        for(int c = 0; c < vec.size(); c++){            vec[c].resize(m);        }        for(int i = 0; i < n; i++){            for(int j = 0; j < m; j++){                vec[i][j] = matrix[j][n-1-i];            //逆时针旋转            }        }        return vec;    }private:vector<vector<int> > temp;vector<int> ans;};
原创粉丝点击