zoukankan      html  css  js  c++  java
  • 顺时针打印矩阵

    输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵:

    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.

    思路:打印第一行,然后删除第一行,逆时针旋转。循环终止到数组中没有元素。

    class Solution {
        void ccwVector(vector<vector<int> >&a){
    
            vector<vector<int>>b = a;
            if (a.size() <= 0)
                return;
    
            //初始化矩阵的空间
            a.clear();
    
            a.resize(b[0].size());
    
            for (int i = 0; i < a.size(); i++){
                a[i].resize(b.size());
            }
            //制作逆时针转向的新矩阵
            for (int i = 0; i < b[0].size(); i++){
                for (int j = 0; j < b.size(); j++){
                    a[b[0].size() - i - 1][j] = b[j][i];
                }
    
            }
        }
    
    
    public:
        vector<int> printMatrix(vector<vector<int> > matrix) {
    
            vector<int>result;
            vector<vector<int>>::iterator i;
            while (matrix.size()>0){
                i = matrix.begin();
                for (auto j = (*i).begin(); j!=(*i).end(); j++){
                    result.push_back(*j);
                }
                matrix.erase(matrix.begin());
                ccwVector(matrix);
            }
            return result;
        }
    };
    
    int main(){
    
        Solution s;
        vector<vector<int>>a(4, vector < int>(4));
            int v = 1;
            //初始化一个矩阵。
            for (int i = 0; i < a.size(); i++){
                for (int j = 0; j < a[0].size(); j++){
                    a[i][j] = v++;
                    cout << a[i][j] <<"  ";
                }
                cout << endl;
            }
            cout << "-----------" << endl;
            vector<int>b = s.printMatrix(a);
            for (int i = 0; i < b.size(); i++){
                    cout<<b[i]<<"   " ;
            }
            cout << endl;
    }
    View Code

     

    //这里先a[i][j] = b[j][i];   发现a中的数组是反的,所以有了下面的代码。

    a[b[0].size() - i - 1][j] = b[j][i];

     细心一点就可以了,这里是有规律的,所有一定能找到循环赋值的方法。

  • 相关阅读:
    while...break 实例
    java ++ -- 异或 短路与 短路或 三目条件
    Java StringBuffer与StringBuider
    输入任意5个整数,输出它们的和。
    java输入年份和月份,输出天数
    进制转换
    luogu 4884 多少个1?
    SDOI2013 随机数生成器
    CQOI2018 破解D-H协议
    模板BSGS(SDOI2011计算器) 模板EXBSGS
  • 原文地址:https://www.cnblogs.com/yuguangyuan/p/5915442.html
Copyright © 2011-2022 走看看