3.C++ 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字

这篇博客介绍了一种解决输入矩阵后按顺时针顺序打印数字的方法,主要包含两种策略:标记数组法和另一种可能易出错的策略。在标记数组法中,通过维护方向向量和当前位置标记,确保按正确顺序读取每个数字,算法的时间复杂度为O(n*m),空间复杂度为O(n)。
摘要由CSDN通过智能技术生成

题目

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

方法一:标记数组法

基本思路:使用dx和dy用来表示前进的方向;其中分别表示向右,向下、向左、向上;使用flag用来标记该位置的树是否被存入;dir用于更改方向的参数,即每次走到头了,修改dir;进行下一个方向;
遍历顺序为:向右---->向下—>向左----->向上–>向右;
外层循环每次先存入遍历方向的第一个数;在进入内层循环,判断x和y加上方向的数;
时间复制度为O(n*m);空间复杂度为O(n)

class Solution {
   
public:
    vector<int> printMatrix(vector<vector<int> > matrix) {
   
    //标记数组法
    int m=matrix.size();
    int n=matrix[0].size();
    vector<int> dx={
   0,1,0,-1};
    vector<int> dy={
   1,0,-1,0};
    vector<vector<bool> > flag(m,vector<bool>(n));
    for(
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值