zoukankan      html  css  js  c++  java
  • 牛客(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 };
  • 相关阅读:
    MyBatis与spring面试题-转载
    122. 买卖股票的最佳时机 II(贪心策略)
    121. 买卖股票的最佳时机
    120. 三角形最小路径和
    236. 二叉树的最近公共祖先(快手面试)
    b,b+树区别
    119. 杨辉三角 II
    118. 杨辉三角
    检查型异常(Checked Exception)与非检查型异常(Unchecked Exception)
    Redis
  • 原文地址:https://www.cnblogs.com/china-sdd/p/6188398.html
Copyright © 2011-2022 走看看