• 剑指offer 20:顺时针打印矩阵


    题目描述

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

    解题思路

    此题为以矩阵中心为轴,顺时针输出一个数组,主要考察的点在于对最后一圈循环输出的边界条件把控。
    将一圈顺时针输出定义为:
    1.从左到右输出(上侧)
    2.从上到下输出(右侧)
    3.从右到左输出(下侧)
    4.从下到上输出(左侧)
    在正常的一圈中4步依次执行,但在最后一圈中2-4步可能只会执行其中个的一部分或不执行,需要根据此圈的形状进行判断。
     
    C++代码实现:
    class Solution {
    public:
        vector<int> printMatrix(vector<vector<int> > matrix) {
            vector<int> result;
            int row=matrix.size();
            if(row==0){
                return result;
               }
            int col=matrix[0].size();
            if(col==0){
                return result;
            }
            int  start=0;
            while(start*2<row && col>start*2){
                printCycle(matrix,result,row,col,start);
                start++;
            }
            return result;
            
        }
        void printCycle(const vector<vector<int> > & ori, vector<int> & result,int row,int col, int start){
            int endrow=row-start-1;
            int endcol=col-start-1;
            
            for (int i=start;i<=endcol;i++){//从左向右打印一行
                result.push_back(ori[start][i]);
            }
            if(endrow>start){
                for (int i=start+1;i<=endrow;i++){//从上到下打印一列
                result.push_back(ori[i][endcol]);
                }
            }
            if(endcol>start && endrow>start){
                for (int i=endcol-1;i>=start;i--){//从右向左打印一行
                result.push_back(ori[endrow][i]);
                }
            }
            if(endcol>start && endrow>start+1){
                for (int i=endrow-1;i>start;i--){//从右向左打印一行
                result.push_back(ori[i][start]);
                }
            }
    
        }
    };
  • 相关阅读:
    C#重载操作符的那点事
    Winform最小化托盘
    C#多线程传参
    GridView事件大全
    测试2
    测试
    FindFileByContent
    JavaScriptCallCSharp js调用C#属性与方法
    GroupBy
    查询指定属性的文件
  • 原文地址:https://www.cnblogs.com/fancy-li/p/11624049.html
Copyright © 2020-2023  润新知