zoukankan      html  css  js  c++  java
  • 剑指offer-顺时针打印矩阵

    描述

    输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵:
    [[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. 根据宽度和高度确定打印的圈数(注意奇偶)
    2. 每一圈分上右下左四条边打印(注意开闭区间)
    3. 打印剩下的一行或一列

    代码

     1 class Solution {
     2 public:
     3     vector<int> printMatrix(vector<vector<int> > matrix) {
     4         // 取宽和高的最小值确定圈数
     5         // 每一圈从上右下左遍历,关键词:i n-i-1,开区间
     6         int row=matrix.size();
     7         int col=matrix[0].size();
     8         int n=min(row,col);
     9         // 如果最小值是计数的话,注意最后一圈只有一个数
    10         int circle_num=n%2==0?n/2:(n-1)/2;  // 考虑奇偶
    11         vector<int> res;
    12         int i=0;
    13         for(;i<circle_num;++i){
    14             for(int j=i;j<col-i-1;++j){  // 列数才代表一行的长度
    15                 res.push_back(matrix[i][j]);
    16             }
    17             for(int j=i;j<row-i-1;++j){  // 行数才代表一列的长度
    18                 res.push_back(matrix[j][col-i-1]);
    19             }
    20             for(int j=col-i-1;j>i;--j){  
    21                 res.push_back(matrix[row-i-1][j]);
    22             }
    23             for(int j=row-i-1;j>i;--j){ 
    24                 res.push_back(matrix[j][i]);
    25             }
    26         }
    27          // 如果是奇数,就还得考虑追加一行或一列的情况
    28         if(n%2!=0){ 
    29             if(row>=col){    // 追加行
    30                 for(int j=i;j<row-i;++j){
    31                     res.push_back(matrix[j][i]);
    32                 }
    33             }else{   // 追加列
    34                 for(int j=i;j<col-i;++j){
    35                     res.push_back(matrix[i][j]);
    36                 }
    37             }
    38         }
    39         return res;
    40     }
    41 };
    心之所愿,永不相忘
  • 相关阅读:
    修改手机端radio 样式
    css ul li 左对齐,换行
    8- 类
    virtualbox虚拟机上网方式
    HTTP请求头详解
    出差总结-2017-11-24
    Some characters cannot be mapped using "GBK" ...
    tortoisesvn与eclipse-svn的删除操作区别
    sql
    setInterval方法, clearInterval
  • 原文地址:https://www.cnblogs.com/zgll/p/15072072.html
Copyright © 2011-2022 走看看