算法之路-数组篇(01)顺时针打印矩阵

题目

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

输入输出示例

输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]
输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]

解题思路

思路就是从最外层先从左上角到右上角,再从右上角到右下角,再次右下角到左下角,再次左下角到左上角一个一个加入自己创建的答案vector
然后进行下次循环,直到最终的循环处理的数据剩一行或者一列或者一个的时候,输出,跳出循环
用四个数字top,left,right,bottom存四个方向的极限
在这里插入图片描述

代码实现

class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
         if(matrix.size()==0||matrix[0].size()==0)
         {
             return {};
         }
        int Top=0,Bottom=matrix.size()-1,Left=0,Right=matrix[0].size()-1;
        vector<int> Answers;
        while(Top<=Bottom&&Left<=Right)
        {
            for(int k=Left;k<=Right;k++)
            {
             Answers.push_back(matrix[Top][k]);
            }
            for(int k=Top+1;k<=Bottom;k++)
            {
                Answers.push_back(matrix[k][Right]);
            }
            if(Left<Right&&Top<Bottom)//这里为什么要有判断,是为了判断是不是只剩一行,或者一列,或者一个,因为如果是这样,上面两次循环已经处理了数据,就不需要在输出后面两次步骤了。
            {
              for(int k=Right-1;k>=Left;k--)
            {
             Answers.push_back(matrix[Bottom][k]);
            }
            for(int k=Bottom-1;k>=Top+1;k--)
            {
                Answers.push_back(matrix[k][Left]);
            }
            }
            Top++;
            Left++;
            Right--;
            Bottom--;

        }
       return Answers;
    }
};

复杂度分析

输入m行,n列的时候,因为输入的每一行每一列刚好执行每个数据一次,所以时间复杂度为O(mn);
空间复杂度:O(n)。因为要有vexctor存放结果。
Over!
注:本人正在努力建设自己的公众号,大家可以关注公众号,此文章也上线我的公众号,公众号将免费提供大量教学Unity相关内容,除了从Unity入门到数据结构设计模式外,我还会免费分享我再游戏开发中使用的素材,书籍,插件,希望大家可以关注我,提前谢谢啦!
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

珞珈大胖强TURBO

谢谢兄弟们,我会一直努力出货的

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值