• 牛客(1)


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

    思路:主要关注4个角,根据是哪个角,在做出相应的操作。

    代码如下:

     1 class Solution {
     2 public:
     3     vector<int> printMatrix(vector<vector<int> > matrix) {
     4       vector<int> results;
     5         if (matrix.size() == 0) {
     6             return results;
     7         }
     8          
     9         int x = 0; 
    10         int y = 0; //当前元素的位置
    11  
    12         int xf = 0;
    13         int yf = 1;//xf和yf表示当前元素位置指针的方向,-1表后退,0停止,1前进
    14  
    15         int rows = matrix.size()-1;        //
    16         int cols = matrix.at(0).size()-1; //17         //当只有一行时
    18         if (rows == 0) {
    19             for (int i = 0; i <= cols; i++) {
    20                 results.push_back(matrix.at(0).at(i));
    21             }
    22             return results;
    23         }
    24         //当只有一列时
    25         if (cols == 0) {
    26             for (int i = 0; i <= rows; i++) {
    27                 results.push_back(matrix.at(i).at(0));
    28             }
    29             return results;
    30         }
    31  
    32         int x_start = 0;
    33         int y_start = 0;
    34  
    35         int x_end = rows;
    36         int y_end = cols;
    37  
    38         bool isFirst = true;
    39  
    40         int size = (rows+1)*(cols+1);    //元素个数
    41         while (results.size() < size) {
    42             results.push_back(matrix[x][y]);    //记录当前元素
    43             x += xf;                            //横坐标变换
    44             y += yf;                            //纵坐标变化
    45             //开始进行四个角的判断以及相关操作
    46             if (x == x_start && y == y_end) {
    47                 xf = 1;
    48                 yf = 0;
    49                 if (!isFirst) {
    50                     y_start += 1;
    51                 }
    52             }
    53             if (x == x_end && y == y_end) {
    54                 xf = 0;
    55                 yf = -1;
    56                 y_end -= 1;
    57                 
    58                  
    59             }
    60             if (x == x_end && y == y_start) {
    61                 xf = -1;
    62                 yf = 0;
    63                 x_start += 1;
    64                  
    65             }
    66             if (x == x_start && y == y_start) {
    67                 xf = 0;
    68                 yf = 1;
    69                 x_end -= 1;
    70                 isFirst = false;
    71             }
    72         }
    73         return results;
    74 }
    75 };
  • 相关阅读:
    8、linux-wc命令 打印出文件中字符行数
    7、linux-排序命令 sort
    6、linux-查看文件 ls
    5、linux-查找命令 grep
    4、linux-文档编辑命令:vi
    第二次作业
    JSP 第一次作业 开发环境搭建
    第十一次作业—安卓课程设计报告
    第十次作业—listview+sqlite 购物车
    第九次作业sharedpreferences实现数据存储-记住账号密码
  • 原文地址:https://www.cnblogs.com/china-sdd/p/6188398.html
Copyright © 2020-2023  润新知