顺时针打印矩阵

题目描述

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.
 
解题思路:
分析发生方向改变的位置,发现跟圈数可以形成关系,主要考察程序控制能力。
class Solution {
public:
    vector<int> printMatrix(vector<vector<int> > matrix) {
        int n = matrix.size();
        int m = matrix[0].size();
        int allNum = n*m;
        vector<int> res;
        int round = 1;
        int i = 0, j = 0;
        int iv = 0, jv = 1;
        while(allNum > 0){
            if(i == round && iv==-1 && jv==0){
                //向右走
                iv = 0;
                jv = 1;
                round++;
            }else if(j == m-round && iv == 0 && jv == 1){
                //向下走
                iv = 1;
                jv = 0;
            }else if(i == n-round && iv == 1 && jv == 0){
                //向左走
                iv = 0;
                jv = -1;
            }else if(j == round -1 && iv == 0 && jv == -1){
                //向上走
                iv = -1;
                jv = 0;
            }
            res.push_back(matrix[i][j]);
            allNum--;
            i = i + iv;
            j = j + jv;
        }
        return res;
    }
};

  

原文地址:https://www.cnblogs.com/chengsheng/p/10655562.html