剑指Offer第十九题:顺时针打印矩阵

2023-11-14

题目描述

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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或者减1,这个需要用变量记录。

还有一点就是需要判断循环停止的条件是否只剩一行和一列的条件,因为只剩下一行一列时,向左和向上停止输入

上面的思路有了,代码写起来会好点。

 

class Solution {
public:
    vector<int> printMatrix(vector<vector<int> > matrix) {
        int n  = matrix.size();//行数
        int m  = matrix[0].size();//列数
        vector<int>my;
        
        if(matrix.size() == 0)
            return my;
        
        int left = 0,  top=0,  right = m-1,  buttom = n-1;
        while(left<=right && top<=buttom)
        {
            //向右
            for(int i = left; i<=right; i++)
                my.push_back(matrix[top][i]);
            
            //向下
            for(int i = top+1;  i<=buttom; i++)
                my.push_back(matrix[i][right]);
            
            //向左(如果顶部等于底部,那么就是一行,不向左)
            for(int i = right-1; top != buttom && i>=left;i-- )
                my.push_back(matrix[buttom][i]);
            
            //向上(如果左部等于右,那么就是一列,不向上)
            for(int i = buttom-1;left != right&& i>=top+1;i--)
                my.push_back(matrix[i][left]);
            
            left++;right--;top++;buttom--;
        }
        return my;
    }
};

 

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

剑指Offer第十九题:顺时针打印矩阵 的相关文章

随机推荐

  • redis配置文件限制只能本地访问问题,虚拟机无法访问

    解决 修改配置文件 daemonize no 用守护线程的方式启动 requirepass yourpassword 给redis设置密码 bind 192 168 1 1 注释掉这部分 这是限制redis只能本地访问 appendonly
  • 双栈排序 二分图匹配

    题目链接 https www acwing com problem content description 155 题目 Tom最近在研究一个有趣的排序问题 通过2个栈S1和S2 Tom希望借助以下4种操作实现将输入序列升序排序 操作a 如
  • (十一)jmeter-集合点---学习笔记

    集合点 简单来理解一下 虽然我们的 性能测试 理解为 多用户并发测试 但真正的并发是不存在的 为了更真实的实现并发这感念 我们可以在需要压力的地方设置集合点 每到输入用户名和密码登录时 所有的虚拟用户都相互之间等一等 然后 一起访问 注意
  • Acwing-4655. 重新排序

    我们可以累计每个 A i 的被求和次数 c i 容易贪心得到 被求和次数越多的肯定得放越大的数 我们可以先统计原来的求和的总和 sum 再给 A 数组和统计求和次数的数组 c 从小到大排好序 最后依次相乘起来即 i 1 n a i c i
  • Win10+VS2015编译caffe踩坑记录

    跑HTM的代码要用到caffe的库 从学长那拷过来的工程里是用VS2013编译的 只能用自己的VS2015重新编译一下 记录一下编译过程 环境 Windows10 VS2015 cuda8 0 cudnn5 1 CMake3 17 0 An
  • 漂亮的弹出框,javascript库bootbox介绍

    传统的javascript的警告框 确认框 提示框
  • 【数字图像处理】三.MFC实现图像灰度、采样和量化功能详解

    本文主要讲述基于VC 6 0 MFC图像处理的应用知识 主要结合自己大三所学课程 数字图像处理 及课件进行讲解 主要通过MFC单文档视图实现显示BMP格式图片 并通过Bitmap进行灰度处理 图片采样和量化功能 个人认为对初学者VC 6 0
  • python 如何解决 No module named ‘pip‘问题

    在下载python第三方库的时候 突然报错 解决方法很简单 两行代码就行了 python m ensurepip easy install pip 此时下载 还不行 提示说要更新pip python m pip install upgrad
  • python 21点

    21点 你可以叫我仁哥 也可以叫我情哥 mua 没请教 21点黑杰克 代码部分 相关说明 我做的是一个简化了的21点没有分牌操作 21点黑杰克 废话不多说先上代码 代码部分 import random import time 延时的这里可以
  • MySql中的先聚合再筛选与先筛选再聚合

    MySql中的先聚合再筛选与先筛选再聚合 where字句在聚合前先筛选记录 也就是说作用在group by和having字句前 而 having子句在聚合后对组记录进行筛选 事例 一 显示每个地区的总人口数和总面积 SELECT area
  • mysql主从同步

    set global server id 2 show slave status 查看binlog日志信息 stop slave change replication filter replicate do db bypass change
  • Qt 控件设置透明和半透明方法汇总

    遇到了好多次控件有需要设置为透明和半透明的情况 每次都是去网上搜一搜 看看别人怎么实现的 浪费了很多时间 故在这里进行一个总结 希望对自己有一个提升 本文对透明的各种情况进行了分类 整个窗口及窗口下的控件都是半透明的状态 分类一 只有窗口是
  • LeetCode_BinaryTree_337. House Robber III 打家劫舍 III【动态规划】【Java】【中等】

    目录 一 题目描述 英文描述 中文描述 示例与说明 二 解题思路 三 AC代码 Java 四 解题过程 第一搏 第二搏 一 题目描述 英文描述 The thief has found himself a new place for his
  • JAVA环境配置及如何解决win10重启后环境配置失效的问题

    一 配置JAVA环境 1 JDK的下载与安装 进入官网下载对应版本 注意 安装路径最好不要包含中文或空格等特殊字符 最好使用纯英文目录 2 配置环境变量的步骤 1 按下win E键 找到此电脑 右键选择属性 点击高级系统设置 在高级中点击右
  • 完美解决python pip安装超时问题

    书接上文 安装python过程中 国外镜像太慢了 使用国内源 1 设置超时时间 pip default timeout 100 install Pillow 2 不使用缓存 pip no cache dir install Pillow 2
  • (pytorch进阶之路)DDPM扩散概率模型

    文章目录 概述 前置知识 diffusion图示 扩散过程 逆扩散过程 后验的扩散条件概率 似然函数 算法 代码实现 概述 扩散概率模型 deep unsupervised learning using nonequilibrium the
  • 快到慢的跨时钟域处理

    如果你写过异步FIFO 格雷码的传输就已经包括慢时钟域到快时钟域以及快时钟域到慢时钟域的处理方法了 自己之前的异步FIFO由于理解没到位 快时钟域到慢时钟域的处理也是打拍 原因是快时钟域的时钟频率不够快 所以debug没问题 步入正题 快到
  • echarts中的data是对象无法使用

    问题描述 前端通常从后端拿到的数据都是数组中有多个对象 而echarts中的data必须是一个数组 形如 Mon Tue Wed Thu Fri Sat Sun 所以需要对后端返回的数据进行处理之后才可以使用 处理办法 this recor
  • UE4、5不让贴花影响Mesh

    如果不想让贴花影响某些在移动中的物体穿过它也会受到影响 例如人 车之类的 可以把mesh里的Receives Decals选项去掉
  • 剑指Offer第十九题:顺时针打印矩阵

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