zoukankan      html  css  js  c++  java
  • 面试题20:顺时针打印矩阵

    比较复杂,见P128解析

     1 void PrintMatrixClockwisely(int** numbers, int columns, int rows)
     2 {
     3     if(numbers == NULL || columns <= 0 || rows <= 0)
     4         return;
     5 
     6     int start = 0;
     7 
     8     while(columns > start * 2 && rows > start * 2)
     9     {
    10         PrintMatrixInCircle(numbers, columns, rows, start);
    11 
    12         ++start;
    13     }
    14 }
    15 
    16 void PrintMatrixInCircle(int** numbers, int columns, int rows, int start)
    17 {
    18     int endX = columns - 1 - start;
    19     int endY = rows - 1 - start;
    20 
    21     // 从左到右打印一行
    22     for(int i = start; i <= endX; ++i)
    23     {
    24         int number = numbers[start][i];
    25         printNumber(number);
    26     }
    27 
    28     // 从上到下打印一列
    29     if(start < endY)
    30     {
    31         for(int i = start + 1; i <= endY; ++i)
    32         {
    33             int number = numbers[i][endX];
    34             printNumber(number);
    35         }
    36     }
    37 
    38     // 从右到左打印一行
    39     if(start < endX && start < endY)
    40     {
    41         for(int i = endX - 1; i >= start; --i)
    42         {
    43             int number = numbers[endY][i];
    44             printNumber(number);
    45         }
    46     }
    47 
    48     // 从下到上打印一行
    49     if(start < endX && start < endY - 1)
    50     {
    51         for(int i = endY - 1; i >= start + 1; --i)
    52         {
    53             int number = numbers[i][start];
    54             printNumber(number);
    55         }
    56     }
    57 }

     另一种方法:

    http://blog.csdn.net/Irean_Lau/article/details/51072768

    /*
        20 :> 顺时针打印数组
    */
    vector<int> printMatrix(vector<vector<int> > matrix) {
        vector<int>res;
        res.clear();
        int row = matrix.size();//行数
        int col = matrix[0].size();//列数
    
        int circle = ((row < col ? row : col) - 1) / 2 + 1;//圈数
    
        for (int i = 0; i < circle; i++)
        {
            //zuo->you
            for (int j = i; j < col - i; ++j)
                res.push_back(matrix[i][j]);
            //shang->xia
            for (int k = i + 1; k < row - i; ++k)
                res.push_back(matrix[k][col - i - 1]);
            //you->zuo
            for (int l = col - i - 2; (l >= i) && (row - i - 1 != i); --l)
                res.push_back(matrix[row - i - 1][l]);
            //xia->shang
            for (int m = row - i - 2; (m > i) && (col - i - 1 != i); --m)
                res.push_back(matrix[m][i]);
        }
        return res;
    }
  • 相关阅读:
    VUE 引入element ui 样式不生效解决
    Spark项目故障思路整理总结
    Spark-环境安装
    01.Kettle的安装-千亿级数仓环境搭建
    千亿级数仓day01-项目的简介
    Umeng项目day04
    Umengday12-统计指标
    Umengday11-azkaban调度
    Umengday09-hive自定义UDTF函数叉分函数
    Docker配置jdk1.8
  • 原文地址:https://www.cnblogs.com/raichen/p/5646952.html
Copyright © 2011-2022 走看看