• 顺时针打印数组


    【问题】输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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,4]打印成[1,2,3,4,3,2,1]

     1class Solution {
     2public:
     3    vector<int> printMatrix(vector<vector<int> > matrix) {
     4        int rows = matrix.size();
     5        int cols = matrix[0].size();
     6        vector<int> res;
     7
     8        // 输入的二维数组非法,返回空的数组
     9        if (rows == 0 || cols == 0)  return res;
    10
    11        // 定义四个关键变量,表示左上和右下的打印范围
    12        int left = 0, top = 0, right = cols - 1, bottom = rows - 1;
    13        while (left <= right && top <= bottom)
    14        {
    15            // 从左向右打印
    16            for (int i = left; i <= right; ++i)  
    17                res.push_back(matrix[top][i]);
    18            // 从上到下打印
    19            for (int i = top + 1; i <= bottom; ++i)  
    20                res.push_back(matrix[i][right]);
    21            // 从右向左打印
    22            if (top != bottom)  // 为了避免矩阵是个行向量,重复打印
    23            for (int i = right - 1; i >= left; --i)  
    24                res.push_back(matrix[bottom][i]);
    25            // 从下到上打印
    26            if (left != right)  // 为了避免矩阵是个列向量,重复打印
    27            for (int i = bottom - 1; i > top; --i)  
    28                res.push_back(matrix[i][left]);
    29            left++,top++,right--,bottom--;
    30        }
    31        return res;
    32    }
    33};
  • 相关阅读:
    一步一步教你在GridView中实现可收缩的面板
    收藏微软面试智力题 (附答案)
    WF4.0实战(一):文件审批流程
    WF4.0实战(六):控制WPF动画
    WF4.0实战(十一):邮件通知
    WF4.0实战(十):分布式酒店订房系统
    WF4.0实战(十六):模拟红绿灯
    WF4.0实战(五):实现一个直观易扩展的自动测试框架
    Beginning WF4读书笔记(一):创建一个简单的工作流
    DataGridView打印类
  • 原文地址:https://www.cnblogs.com/zhudingtop/p/11332852.html
Copyright © 2020-2023  润新知