c++实现---顺时针打印矩阵

2023-05-16

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.
题目抽象:给一个二维矩阵,顺时针转圈打印矩阵。
转圈说:把矩阵最外层看成一个圈
顺时针转圈打印矩阵,那么我们可以先打印最外圈,然后再打印次外圈。
也就是不断收缩矩阵的边界
定义四个变量代表范围,lx、ly、rx、ry
向右走存入整行的值,当存入后,该行再也不会被遍历,代表上边界的 lx 加一;
向下走存入整列的值,当存入后,该列再也不会被遍历,代表右边界的 ry 减一;
向左走存入整行的值,当存入后,该行再也不会被遍历,代表下边界的 rx 减一;
向上走存入整列的值,当存入后,该列再也不会被遍历,代表左边界的 ly加一;
代码如下:

class Solution {
public:
    void print(int lx,int ly,int rx,int ry,vector<vector<int>> &matrix,vector<int> &res){
        for(int i=ly;i<=ry;++i) res.push_back(matrix[lx][i]);//从左到右
        for(int j=lx+1;j<=rx;++j) res.push_back(matrix[j][ry]);//从上到下
        int h=rx-lx+1;//计算当前循环高度
        if(h>1){//只有高度大于1才从右往左打印
            for(int ri=ry-1;ri>=ly;--ri) res.push_back(matrix[rx][ri]);
        }
        int w=ry-ly+1;//计算当前循环宽度
        if(w>1){//只有宽度大于1才从下往上打印
            for(int rj=rx-1;rj>lx;--rj) res.push_back(matrix[rj][ly]);
        }
    }
    vector<int> printMatrix(vector<vector<int> > matrix) {
        vector<int> res;
        if(matrix.size()==0||matrix[0].size()==0){
            return res;
        }
        int lx=0,ly=0;
        int rx=matrix.size()-1,ry=matrix[0].size()-1;
        while(lx<=rx&&ly<=ry){//循环打印,直到矩阵超界,每次左上角点坐标+1,右上角坐标减一
            print(lx++,ly++,rx--,ry--,matrix,res);
        }
        
        return res;

    }
};

时间复杂度:O(mn), 矩阵中每个元素遍历一次
空间复杂度:O(mn), 每个元素需要存下来

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++实现---顺时针打印矩阵 的相关文章

随机推荐

  • iOS TableView多级列表

    代码地址如下 xff1a http www demodashi com demo 15006 html 效果预览 一 需求 TableView多级列表 xff1a 分级展开或合并 xff0c 逐级获取并展示其子级数据 xff0c 可以设置最
  • C++——linux下valgrind工具检测内存泄露和性能分析

    1 Valgrind简介 官网Valgrind介绍是一款用于内存调试 内存泄漏检测以及性能分析的软件开发工具 这些工具之中最有名的是Memcheck 它能够识别很多C或者C 43 43 程序中内存相关的错误 xff0c 这些错误会导致程序崩
  • 2023年最新Kali安装教程(超详细,手把手教你下载安装kali虚拟机)

    一 镜像下载 镜像链接 xff1a https mirrors tuna tsinghua edu cn kali images kali 2022 3 kali linux 2022 3 installer amd64 iso 注 xff
  • 安装tomcat时,SYSTEM进程(PID=4)占用80端口的几种情况及解决方法(window7系统)...

    首先 xff0c 我们要看怎么80端口是否被占用 xff1a 点击电脑左下角的 输入cmd xff0c 回车 xff0c 然后输入netstat ano findstr 34 80 34 然后回车 xff08 注意 xff0c ano后面是
  • MFC入门

    VS2010新建工程 选择CDialogEx 默认创建出一个带有确认和取消按键的对话框 例如创建的程序名为TestOne 则创建出一个CTestOneApp类 xff0c 继承自CWinApp 在CWinApp中的InitInstance函
  • Opencv_04 图像的数据类型Mat详解

    文章目录 一 Mat数据类型介绍二 Mat的常用操作 创建Mat对象 常用的Mat构造函数 Mat的行与列相关的操作 拷贝和转换 Mat类常用的成员属性 图像的基本信息 按照类型生成图像矩阵 一 Mat数据类型介绍 首先Mat数据你不需要手
  • vue3.0 `defineEmits` is a compiler macro and no longer needs to be imported.

    打包的时候 xff0c 给了这个提示 span class token variable span class token variable 96 span defineEmits span class token variable 96
  • 关于va_list

    iOS软件开发揭密 的笔记 第89页 可变参数在Objective C中用 表示 在示例代码中 xff0c 如此接收变参 xff1a 43 NSInvocation invocationWithTarget id target andSel
  • VGG(2014),3x3卷积的胜利

    文章目录 写在前面网络结构multi scale training and testing其他有意思的点参考 博客 xff1a blog shinelee me 博客园 CSDN 写在前面 VGG 2014 网络出自paper Very D
  • 关于八码数问题有解与无解的证明

    关于八码数问题 有解 与无解 的证明 8数码难题搜索时 xff0c 有时候是无解 的 xff0c 8数码问题 总共有9 种状态 xff0c 如果用计算机一 个一个去搜索去判断哪些有解 哪些误解 xff0c 无疑要花费很长的时间 xff0c
  • Kurento模块开发指南之二:开发示例 Pointer Detector Filter

    17 1 2 模块教程1 Pointer Detector Filter 这个页面应用由一个带有指针跟踪滤镜组件的WebRTC视频通信回看组成 Java 模块教程 1 Pointer Detector Filter 这个页面应用由一个带有指
  • Kurento模块开发指南之五:开发示例 Plate Detector Filter

    17 1 5 模块教程 4 Plate Detector Filter This web application consists on a WebRTC video communication in mirror loopback wit
  • Ubuntu删除python3后无法启动的修复

    最近再学python xff0c 于是在Ubuntu上准备安装一个python3 发现系统自带的python3 4 xff0c 于是想卸载后安装高版本 1 虚拟机启动Ubuntu xff0c 用finalshell登录Ubuntu 2 按度
  • 关于VSCode安装go插件问题

    比较常见的go开发编辑工具有VSCode GoLand等 xff0c 其中 xff0c 使用VSCode需要下载相关的go语言插件 但是大多数情况都会下载失败 xff0c 因为有些资源需要翻墙的原因 xff0c 有时候翻墙了还是会报错 本文
  • stm32 hid游戏手柄程序

    用USB键盘程序修改成了 USB游戏手柄 xff0c 是3轴 12按钮的 用手头的STM32F103C8T6最小系统板 测试过 可以用了 USB每次传输5字节 1 xff1a x轴 2 xff1a y轴 3 xff1a 滑块 4 xff1a
  • 把/sbin加入路径

    执行命令fdisk l失败 xff0c 而执行 sbin fdisk l成功 lt 1 gt 使用whereis 查看命令所在的目录 如 xff1a whereis fdisk fdisk sbin fdisk usr share man
  • IOS动画库汇总

    Core Animation笔记 xff0c 基本的使用方法 Core Animation笔记 xff0c 基本的使用方法 xff1a 1 基本动画 xff0c 2 多步动画 xff0c 3 沿路径的动画 xff0c 4 时间函数 xff0
  • sql创建查询视图语句

    学生表 c表 s表 sc表 1 查询全体学生的学号 xff0c 姓名与年龄 SELECT sno sname age 61 year getdate year sbirth FROM S 2 查询计算机系 xff08 CS xff09 的学
  • 关于手机网游(android_game)软件相关数据的爬取和spss分析

    前言 工欲善其事 xff0c 必先利其器 学习了python爬虫的基础知识和spss分析工具后 xff0c 动手写代码爬取数据进行spss分析才能更好掌握工具的使用 xff0c 提升自己 我选择了一个游戏网站 xff0c 爬取其手机网游的信
  • c++实现---顺时针打印矩阵

    输入一个矩阵 xff0c 按照从外向里以顺时针的顺序依次打印出每一个数字 xff0c 例如 xff0c 如果输入如下4 X 4矩阵 xff1a 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1