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

    原创文章,转载请注明出处!

    博客文章索引地址

    博客文章中代码的github地址

    1.题目

          输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵,则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.

                                                                                                                  image             image


    2.思路

          把矩阵看成由若干个顺时针方向的圈组成,循环打印矩阵中的每个圈,每次循环打印一个圈。打印一圈通常分为四步,第一步从左到右打印一行;第二步从上到下打印一列;第三步从右到左打印一行;第四步从下到上打印一列。设置四个变量left,right,top,btm,用于表示圈的方位,每一步根据起始坐标和终止坐标循环打印。

    注意:最后一圈有可能不需要四步,有可能只有一行,只有一列,只有一个数字,因此我们要仔细分析打印每一步的前提条件:

    • 打印第一步,第一步总是需要的。

    image

    • 打印第二步的前提条件是(top<btm)

    image

    • 打印第三步的前提条件是(top<btm && left<right)

    image

    • 打印第四步的前提条件是(top+1<btm&&left<right)

    image

    3.code

      1 class Solution {
      2 public:
      3     vector<int> printMatrix(vector<vector<int>> matrix) {
      4         // 二维矩阵行数和列数
      5         int row=matrix.size();
      6         int col=matrix[0].size();
      7 
      8         // 存储结果
      9         vector<int> result;
     10 
     11         // 边界条件
     12         if(row==0||col==0)
     13             return result;
     14 
     15         // 圈的四个角标
     16         int left=0,right=col-1,top=0,btm=row-1;
     17 
     18         while(left<=right&&top<=btm)
     19             {
     20             for(int i=left;i<=right;i++)
     21                 result.push_back(matrix[top][i]);
     22 
     23             if(top<btm)
     24                 for(int i=top+1;i<=btm;i++)
     25                     result.push_back(matrix[i][right]);
     26 
     27             if(top<btm&&left<right)
     28                 for(int i=right-1;i>=left;i--)
     29                     result.push_back(matrix[btm][i]);
     30 
     31             if(top+1<btm&&left<right)
     32                 for(int i=btm-1;i>=top+1;i--)
     33                     result.push_back(matrix[i][left]);
     34 
     35             left++;right--;top++;btm--;
     36         }
     37         return result;
     38     }
     39 };
  • 相关阅读:
    Oracle中有大量的sniped会话
    Error 1130: Host '127.0.0.1' is not allowed to connect to this MySQL server
    汉字转换为拼音以及缩写(javascript)
    高效率随机删除数据(不重复)
    vs2010 舒服背景 优雅字体 配置
    mvc中的ViewData用到webfrom中去
    jquery ajax return值 没有返回 的解决方法
    zShowBox (图片放大展示jquery版 兼容性好)
    动感效果的TAB选项卡 jquery 插件
    loading 加载提示······
  • 原文地址:https://www.cnblogs.com/wanglei5205/p/8526475.html
Copyright © 2011-2022 走看看