顺时针打印矩阵 C++实现与思路分析

顺时针打印矩阵 C++实现与思路分析

题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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

首先,拿到此题第一步必定时先如图一图二所示,在草稿纸上做一个草稿,理解题目。
观察图2,我们发现在箭头行走的过程中,去掉箭头走过的路径,他就是一个不断收缩矩阵边界的过程。定义四个变量,up、down、left、right。
在这里插入图片描述

图3
观察图3,我们不难发现在上界的时候箭头是始终往右走的,下界的时候是始终往左走的,左界的时候是始终往上走的,右界的时候始终往下走的,如下图:

在这里插入图片描述

图4
然后我们可以想到代码中的核心思想:
  1. 向右走时存入整行的值,当存入后,该行再也不会被遍历,代表上边界的 up 加一,且移动过程中上界的up保持不变
  2. 向下走时存入整列的值,当存入后,该列再也不会被遍历,代表右边界的 right 减一,且移动过程中右界的right保持不变
  3. 向左走时存入整行的值,当存入后,该行再也不会被遍历,代表下边界的 down 减一,且移动过程中下界的down保持不变
  4. 向上走时存入整列的值,当存入后,该列再也不会被遍历,代表左边界的 left 加一,且移动过程中左界的left保持不变、

首先,弄清楚函数的输入输出
//输入一个二维vector
//输出一个vector

 vector<int> printMatrix(vector<vector<int> > matrix)

//在函数中定义一个vector类型变量,用于存放输出
//计算二维vector的长和宽是否有一个为零,若为零直接返回空的list

        vector<int> list ; 
        if(matrix.size()==0 || matrix[0].size()==0)return list ;

//定义上下左右的界限
//vector中的读数和数组是类似的,都是从0开始
//所以down和right后面要减1

        int up = 0;
        int down =matrix.
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值