• 19、剑指offer--顺时针打印链表


    题目描述
    输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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)然后定义四个变量表示当前的left、right、top、bottom
    2)left<=right && top<=bottom按照从左到右、从上到下、从右到左、从下到上的顺序打印
    3)需要注意的是:在从右到左时,如果当前矩阵只剩下一列,不需要进行此次操作,进行相关情况的判断;同理从下到上也是如此。
      1 #include <iostream>
      2 #include <vector>
      3 using namespace std;
      4 class Solution {
      5 public:
      6     vector<int> printMatrix(vector<vector<int> > matrix) {
      7         vector<int> result;//存储结果
      8         int row = matrix.size();
      9         int colunm = matrix[0].size();
     10         if(row<=0 || colunm <= 0)
     11             return result;
     12         int left = 0;
     13         int right = colunm - 1;
     14         int top = 0;
     15         int bottom = row - 1;
     16         while((left<=right) && (top <= bottom))
     17         {
     18             //从左向右
     19             for(int i=left;i<=right;i++)
     20             {
     21                 result.push_back(matrix[top][i]);
     22             }
     23             top++;
     24             //从上到下
     25             for(int i= top;i<=bottom;i++)
     26             {
     27                 result.push_back(matrix[i][right]);
     28             }
     29             right--;
     30             //从右到左
     31             //只剩下一行情况,因为之前top已经++,此时top==bottom+1 但是left!=right,不加判断会又从右往回输出一遍
     32             if(top <= bottom)
     33             {
     34                 for(int i =right;i>=left;i--)
     35                 {
     36                     result.push_back(matrix[bottom][i]);
     37                 }
     38             }
     39             bottom--;
     40             //从下到上
     41             //只剩下一列情况,此时top!=bottom 因为right之前已经--,此时left==right+1,不加判断会又从下往上再输出一遍
     42             if(left <= right)
     43             {
     44                 for(int i= bottom;i>=top;i--)
     45                 {
     46                     result.push_back(matrix[i][left]);
     47                 }
     48             }
     49             left++;
     50         }
     51         return result;
     52     }
     53 };
     54 int main()
     55 {
     56     vector<vector<int> > a;
     57     vector<int> b;
     58     b.push_back(1);
     59     b.push_back(2);
     60     b.push_back(3);
     61     b.push_back(4);
     62     a.push_back(b);
     63     b.clear();
     64     b.push_back(5);
     65     b.push_back(6);
     66     b.push_back(7);
     67     b.push_back(8);
     68     a.push_back(b);
     69     b.clear();
     70     b.push_back(9);
     71     b.push_back(10);
     72     b.push_back(11);
     73     b.push_back(12);
     74     a.push_back(b);
     75     b.clear();
     76     b.push_back(13);
     77     b.push_back(14);
     78     b.push_back(15);
     79     b.push_back(16);
     80     a.push_back(b);
     81     b.clear();
     82     Solution s;
     83     vector<int> c;
     84     c = s.printMatrix(a);
     85     for(int i=0;i<c.size();i++)
     86         cout<<c[i]<<"  ";
     87     cout<<endl;
     88 
     89     b.clear();
     90     a.clear();
     91     b.push_back(1);
     92     b.push_back(2);
     93     b.push_back(3);
     94     b.push_back(4);
     95     b.push_back(5);
     96     a.push_back(b);
     97 
     98     c = s.printMatrix(a);
     99     for(int i=0;i<c.size();i++)
    100         cout<<c[i]<<"  ";
    101     cout<<endl;
    102     return 0;
    103 }

  • 相关阅读:
    JS实现继承的几种方式
    Chrome断点调试
    前端小技巧总结
    Laravel5.2 下使用Form
    js 获取input file路径改变图像地址
    html p标签换行问题
    Apache+php配置 Mysql安装出错解决办法
    jQuery旋转插件jqueryrotate 图片旋转
    jquery图片3D旋绕效果 rotate3Di的操作
    mac apache php相关
  • 原文地址:https://www.cnblogs.com/qqky/p/6876914.html
Copyright © 2020-2023  润新知