• 面试题20:顺时针打印矩阵


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

    1  2  3  4

    5  6  7  8

    9  10  11  12

    13  14  15  16

    则依次打印出数字1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16

     1 void printMatrixClockwisely(vector< vector<int> >&numbers)
     2 {
     3     int m = numbers.size();
     4     if ( m == 0 )
     5         return ;
     6     int n = numbers[0].size();
     7     if ( n == 0 )
     8         return ;
     9     int leftTop = 0;
    10     while (leftTop*2 < m && leftTop*2 < n)
    11     {
    12         //打印左上角元素为numbers[leftTop][leftTop]的元素
    13         int endCol = n - 1 - leftTop;
    14         int endRow = m - 1 -leftTop;
    15         //从左到右打印一行
    16         for (int j = leftTop; j <= endCol; ++j)
    17             cout << numbers[leftTop][j] << ' ';
    18         //从上到下打印一行
    19         if (endRow > leftTop)
    20         {//注意是两行,不能是两列
    21         for (int i = leftTop+1; i <= endRow; ++i)
    22             cout << numbers[i][endCol]<< ' ';
    23         }
    24         //从右到左打印一行
    25         if (endRow > leftTop && endCol > leftTop )
    26         {
    27             for (int j = endCol-1; j >= leftTop; --j)
    28                 cout << numbers[endRow][j]<< ' ';
    29         }
    30         //从下到上打印一行
    31         if (endRow - 1 > leftTop && endCol > leftTop)
    32         {
    33         for (int i = endRow-1; i > leftTop; --i)
    34             cout << numbers[i][leftTop]<< ' ';
    35         }
    36         leftTop++;
    37     }
    38 }

    分析:该题主要有两个需要注意的地方(选取左上角(leftTop,leftTop)的一圈为分析目标):

    • 循环终止条件。通过举例分析得出leftTop*2 < m && leftTop*2 < n为循环终止条件;
    • 打印每一步的前提条件。第一步总是需要的。而第二步要求至少有两行,第三步打印的前提条件是圈内至少有两行两列,而第四步打印则要求至少有三行两列。
  • 相关阅读:
    用于 Visual Studio 和 ASP.NET 的 Web 应用程序项目部署常见问题
    django 之知识点总结以及Form组件
    HTTP协议详细介绍
    分页和中间件
    用户认证--------------auth模块
    关于查询知识点总结
    cookie和session
    django之跨表查询及添加记录
    django之数据库表的单表查询
    django之ORM数据库操作
  • 原文地址:https://www.cnblogs.com/happygirl-zjj/p/4618021.html
Copyright © 2020-2023  润新知