zoukankan      html  css  js  c++  java
  • 剑指offer之【顺时针打印矩阵】

    题目:

      顺时针打印矩阵

    链接:

      https://www.nowcoder.com/practice/9b4c81a02cd34f76be2659fa0d54342a?tpId=13&tqId=11172&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

    题目描述:

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

    代码:

      

     1 class Solution{
     2 public:
     3     vector<int> printMatrix(vector<vector<int>> matrix){
     4         int row = matrix.size();        // 行数
     5         int col = matrix[0].size();        // 列数
     6         int rl = 0,rh = row-1,cl = 0,ch = col-1;
     7         vector<int> res;
     8         while(rl <= rh && cl <= ch){            // 判断是否进行打印
     9             printOut(matrix, res , rl, rh, cl ,ch);
    10             ++rl;
    11             --rh;
    12             ++cl;
    13             --ch;
    14         }
    15         return res;
    16     }
    17     void printOut(vector<vector<int>> &matrix,vector<int> &res, int rl,int rh,int cl,int ch){
    18         if(rl == rh && cl == ch)                //判断是否只需要打印点
    19               res.push_back(matrix[rl][cl]);
    20         else if(rl == rh ){                        //判断是否只需要打印列
    21             for(int i =cl; i<= ch; ++i){
    22                 res.push_back(matrix[rl][i]);
    23             }
    24         }
    25         else if(cl == ch){                        //判断是否只需要打印行
    26             for(int i = rl; i <= rh ;++i){
    27                 res.push_back(matrix[i][cl]);
    28             }
    29         }
    30         else{                                    //打印矩阵环
    31             for(int i = cl; i<= ch;++i){
    32                 res.push_back(matrix[rl][i]);
    33             }
    34             for(int i = rl+1; i <= rh-1 ; ++i){
    35                 res.push_back(matrix[i][ch]);
    36             }
    37             for(int i = ch ;i >= cl; --i){
    38                 res.push_back(matrix[rh][i]);
    39             }
    40             for(int i = rh-1 ; i>= rl+1; --i){
    41                 res.push_back(matrix[i][cl]);
    42             }
    43         }
    44     }
    45 };
  • 相关阅读:
    css边框以及其他常用样式
    jemeter学习-badboy录制与代理服务器录制
    linux基础命令学习
    cookie与session
    网址保存
    安全性测试要点转摘
    Charles弱网测试转载
    java 中文乱码以及转码
    spring学习总结——高级装配学习四(运行时:值注入、spring表达式)
    spring学习总结——高级装配学习三(Bean的作用域)
  • 原文地址:https://www.cnblogs.com/wangshujing/p/6936356.html
Copyright © 2011-2022 走看看