面试题20:顺时针打印矩阵(Leetcode-54和57)

微机原理与接口技术第六版周荷琴课后习题答案及解析(期末重点) 第二章 1.8086/8088CPU可直接寻址多少个内存(字节)单元?多少个I/O端口?它们的外部数据总线各有多少根? 8086/8088CPU使用的是20位地址总线,因此可以直接寻址2的20次方个内存单元(即1,048,576),每个单元大小为1字节,因此可以直接寻址2的20次方个字节的内存。 8086/8088CPU有64K个I/O端口,每个端口占用1字节的地址空间,因此可以直接寻址6... 阅读详情

一.打印矩阵

题目:输入一个矩阵,从外向里顺时针打印出每一个数字,例如输入以下矩阵:
这里写图片描述
输出:1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10。
分析:可以把这个问题分解为各个小圈,每圈按照顺时针来访问。
在这里插入图片描述
设置四个边界:上(top)下(down)左(left)右(right)
循环的条件为left <= right && top <= down
顺时针的顺序为:
从左往右:left -> right
从上往下:top + 1 -> down
从右往左:right -1 -> left
从下往上:down - 1 -> top - 1
遍历完一圈后,再遍历内一圈:
left++,right–,top++,down–

这里,要注意的是:
如果是最后只剩下一行,即top=down,无需再从右往左遍历,因为从左往右时已遍历。
同理,如果只剩下最后一列,即left=right,无需再从下往上遍历。
这两种情况如下图所示:
在这里插入图片描述
在这里插入图片描述
代码如下:

vector<int> printMatrix(vector<vector<int> > matrix) {
  int row_size = matrix.size();
  int column_size = 0;
  if (row_size > 0) {
    column_size = matrix[0].size();
  }

  vector<int> ret;
  // 设置4个边界,左右上下
  int left = 0, right = column_size - 1, top = 0, down = row_size - 1;
  // 循环满足边界条件
  while (left <= right && top <= down) {
    // 此时在最上面,从左往右遍历,行=top
    for (int i = left; i <= right; ++i) {
      ret.push_back(matrix[top][i]);
    }
    
    // 此时在最右边,再从上到下遍历(此时top已遍历过,因此从top+1开始),列=right
    for (int i = top + 1; i <= down; ++i) {
      ret.push_back(matrix[i][right]);
    }

    if (top != down) {
      // 只剩最后一行时(top == down),无需再从右往左遍历
      // 此时在最下边,再从右往左遍历(此时right已遍历,因此从right-1开始),行=down
      for (int i = right - 1; i >= left; --i) {
        ret.push_back(matrix[down][i]);
      }
    }
    
    if (left != right) {
      // 只剩最后一列时(left == right),无需再从下往上遍历
      // 此时在最左边,再从下往上遍历(此时down和top已遍历,因此从down-1开始,top-1结束),列=left
      for (int i = down - 1; i > top; --i) {
        ret.push_back(matrix[i][left]);
      }
    }
    
    //遍历一圈结束,开始下一内圈
    left++;
    right--;
    top++;
    down--;
  }
  return ret;
}

二. 螺旋生成N平方矩阵

思路与上面差不多,只是在helper函数里,多一个引用传递参数start_value,用于记录遍历到哪一个数了。
另外vector<vector<int>>的动态初始化也要注意。

vector<vector<int>> generateMatrix(int n) {
    vector<vector<int> > ret(n, vector<int>(n, 1));
    if(n <= 0)
    {
        return ret;
    }
    
    int start = 0;
    int start_value = 1;
    while(n > start*2)
    {
        generateMatrixHelper(n, start, start_value, ret);
        start++;
    }
    
    return ret;    
}

void generateMatrixHelper(int n, int start, int &start_value, vector<vector<int>>& matrix)
{
    int end = n - 1 - start;

    //从左往右填充数据
    for(int i=start; i <= end; ++i)
    {
        matrix[start][i] = start_value;
        start_value++;
    }

    //从上往下填充数据
    for(int i=start+1; i <= end; ++i)
    {
        matrix[i][end] = start_value;
        start_value++;
    }

    //从右往左填充数据,要判断所在行是否大于start,否则会重复填充
    if(start < end)
    {
        for(int i=end-1; i >= start; --i)
        {
            matrix[end][i] = start_value;
            start_value++;
        }
    }

    //从下往上填充数据,要判断所在列是否大于start,否则会重复填充
    if(start < end)
    {
        for(int i=end-1; i > start; --i)
        {
            matrix[i][start] = start_value;
            start_value++;
        }
    }
}
复现YOLOv8语义分割和目标检测训练自己的数据集 训练过程首先会显示你所使用的训练的硬件设备信息,然后下一段话则是你的参数配置,紧接着是backbone信息,最后是加载信息,并告知你训练的结果会保存在runs\segment\trainxx。(1)修改数据加载配置文件,在E:\project\MODEL\YOLO\yolov8-8.2.76\ultralytics-8.2.76\ultralytics\cfg\datasets。三、训练自己的数据集,segment数据集是json格式的。如果想使用多卡训练,device='\0,1,2,xxx\' 阅读详情

相关推荐

Agent 操作系统:未来的 Harness 平台

在大模型技术爆发的当下,自主智能体(Agent)已经成为AI原生应用的核心载体,但当前Agent开发面临着碎片化严重、运维难度高、规模化落地难三大核心痛点,就像1970年代没有通用操作系统的裸机编程时代,开发者需要重复造轮子解决底层基础设施问题。本文将深度解析Agent操作系统(Agent OS)作为AI原生时代的底层基础设施的核心定位,以及下一代Harness平台如何将Agent OS与成熟的DevOps、CI/CD、可观测性、成本管理能力深度融合,成为AI原生应用全生命周期管理的统一平台。

软件工程实践的博客 278

Leetcode第54题(螺旋矩阵)

Leetcode第54题(螺旋矩阵)

ShiXiAoLaNga的博客 393

VSCode终端打不开?3分钟搞定Windows下Terminal配置(附最新JSON设置方法)

本文针对Windows系统下VSCode终端无法启动的常见问题,提供了详细的诊断与解决方案。核心在于更新已弃用的旧配置,采用最新的JSON设置方法,通过定义`terminal.integrated.profiles.windows`和指定`terminal.integrated.defaultProfile.windows`,快速修复并优化终端配置,实现三分钟内恢复正常使用。

flower的专栏 741

leetcode第54题螺旋遍历矩阵解法详解

首先我定义的左边界的初始值是0,然后在指针的转向控制逻辑中遇到边界即可以转向,所以我的代码会在第一步就转向,这导致了错误,然而这个时候已经过去了两个小时,我放弃死磕了,我去看了题解,一看题解我就拍大腿,心理想:“原来是这样,太聪明了。通过对题目的观察,我发现在遍历矩阵的时候,指针的4个方向会周期变化,所以想到用4个单位移动量表示指针的移动,但是困在了不能实现这种周期变化,另外也无法控制指针去访问已经遍历过的区域,第一次尝试失败;3. 遇到困难没有找到问题的关键,并解决它。2.代码组织衔接僵硬。

Selbstvertrauen的博客 809

睿思综述智能体:100篇高质量文献一键生成万字长文,还能联网PubMed,科研效率拉满!

对一个主题进行文献综述,是日常科研人绕不过去的工作,无论是写论文前言,综述论文,或者基金申请书的立项依据,需要根据主题,从海量文献中提取相关信息,梳理出清晰的逻辑线,再组织成流畅的文字。4 一键生成万字全文:大纲确认后,它会基于对所有论文的深度理解,逐个章节进行详细撰写,最终生成一篇逻辑连贯、内容翔实、引用规范的万字综述长文,并直接保存为Word(.docx)文件。3 智能撰写大纲:你可以提供自己的大纲,也可以让它根据所有文献内容,智能生成一个逻辑清晰的综述大纲,并支持你在此基础上修改。

dinaxuejie的博客 821

从仿真到器件:铌酸锂电光调制器Comsol建模避坑指南

本文详细介绍了铌酸锂电光调制器在Comsol中的建模全流程,涵盖晶体切向选择、材料参数配置、多物理场耦合等关键技术。通过实战案例和调试技巧,帮助工程师避开常见建模陷阱,提升仿真精度与效率,特别适用于高速光通信系统的器件设计与优化。

m2n3b4v5c6的博客 419

【LeetCode-简单】剑指 Offer 29. 顺时针打印矩阵(详解)

剑指 Offer 29. 顺时针打印矩阵 java版,与54. 螺旋矩阵 相同

丨康有为丨的博客 1041

二阶锥松弛在配电网最优潮流计算中的应用(IEEE33节点配电网最优潮流算例matlab程序)(yalmip+cplex)

文献[7]建立了以支路潮流计算为基础的OPF模型,针对OPF中的非凸性约束,采用SOCR技术将其松弛为二阶锥约束,整个 OPF 模型则被转化为二阶锥规划( Second Order Cone Programming,SOCP)问题,对其求解可以得到全局最优解。其次结合辐射型配电网潮流特点建立支路潮流约束,并考虑配电网中的可控单元,包括分布式电源和离散、连续无功补偿装置,建立其出力约束,该模型为非凸非线性模型;式中,αj,t和βij,t分别为t时段内节点i电压的二次方和支路ij电流的二次方。

weixin_47365903的博客 1万+

LeetCode02顺时针打印数组

顺时针打印矩阵 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 示例 1: 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5] 示例 2: 输入: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] 限制: 0 <= matrix.length <= 100 0 <= matrix[i].lengt

weixin_44529429的博客 306

开源项目evo2安装教程

Evo 2 是一种先进的 DNA 语言模型,用于长上下文建模和设计。Evo 2 使用 StripedHyena 2 架构在单核苷酸分辨率下对 DNA 序列进行建模,上下文长度可达 100 万碱基对。Evo 2 使用 Savanna 进行预训练,并在 OpenGenome2 数据集上进行自回归训练,该数据集包含来自所有生命领域的 8.8 万亿个标记。

猿小白的博客 927

JVM高频面试基本问题与知识点整理

JVM高频面试基本问题与知识点整理

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 87万+

leetcode: 顺时针打印矩阵(螺旋数组)

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 ps: 0 <= matrix.length <= 100 0 <= matrix[i].length<= 100 螺旋打印数组,可以围着打印一圈,注意循环条件 class Solution: def spiralOrder(self, matrix: List[List[int]]) -> List[int]: if not matrix or not matrix[0]: ..

qqMiSa的博客 807

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

LeetCode 面试题29. 顺时针打印矩阵

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

一起加油 5582

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Leetcode面试题29. 顺时针打印矩阵[Easy] -JAVA

面试题29. 顺时针打印矩阵 https://leetcode-cn.com/problems/shun-shi-zhen-da-yin-ju-zhen-lcof/ 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 示例 1: 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5] 示例 2: 输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]] 输出:[1,2,3,4,8,12,11,1

小小柯 222

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

leetcode--顺时针打印矩阵

 题目来自LeetCode,链接:面试题29. 顺时针打印矩阵。具体描述为:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。  示例1: 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5]  示例2: 输入: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]  蛮经典的题目,记得本科那会参加一个笔试就做过这道题。做法也比较

JR_Chan的博客 524

【一刷《剑指Offer》】面试题 20:顺时针打印矩阵

对于每层,从左上方开始以顺时针的顺序遍历所有元素。遍历完当前层的元素之后,将 left 和 top 分别增加 1,将 right 和 bottom 分别减少 1,进入下一层继续遍历,直到遍历完所有元素为止。可以将矩阵看成若干层,首先输出最外层的元素,其次输出次外层的元素,直到输出最内层的元素。定义矩阵的第 k 层是到最近边界距离为 k 的所有顶点。

Elena's Blog 562

力扣 面试题29. 顺时针打印矩阵(简单难度)

力扣 面试题29. 顺时针打印矩阵(简单难度) 题目: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 示例 1: 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5] 示例 2: 输入: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] 说说这题的思路,我先定义了当前坐标,用(x,y)表示,然后定义上左下右四个边界值。模拟取

weixin_43838406的博客 379

LeetCode 59. 螺旋矩阵 II && LeetCode 54. 螺旋矩阵

文章目录1. 题目信息2. 解题 1. 题目信息 给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。 示例: 输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ] 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/spiral-matri...

Michael是个半路程序员 1381

LeetCode-面试题29、顺时针打印矩阵-简单

LeetCode-面试题29、顺时针打印矩阵-简单 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 示例 1: 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5] 示例 2: 输入: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] 限制: 0 <= matrix.length <= 100 0 .

clover_my的博客 276

leetcode 面试题29. 顺时针打印矩阵

leetcode 面试题29. 顺时针打印矩阵 题目详情 题目链接 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 示例 1: 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5] 示例 2: 输入: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] 限制: 0 <= matrix.length <= 10

qq_33789406的博客 232

面试题29:顺时针打印矩阵

顺时针打印矩阵题目描述leetcode 螺旋矩阵leetcode 螺旋矩阵2leetcode 螺旋矩阵3 题目描述 输入一个矩阵,从外到里以顺时针顺序依次打印 思路:将其看作一圈一圈打印 开始:(start, start)坐标,(0, 0), (1, 1),(2,2)… 终止打印一圈的条件:cols>startx2, rows>starty2 如何打印一圈? 从左到右:总...

一只咸鱼的小努力 402

【Python】【难度:简单】Leetcode 面试题29. 顺时针打印矩阵【完】

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 示例 1: 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5] 示例 2: 输入: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] 限制: 0 <= matrix.length <= 100 0 <= matrix[i].length&...

thomashhs12的博客 376

LeetCode刷题之面试题29. 顺时针打印矩阵

LeetCode刷题之面试题29. 顺时针打印矩阵 我不知道将去向何方,但我已在路上! 时光匆匆,虽未曾谋面,却相遇于斯,实在是莫大的缘分,感谢您的到访 ! 题目: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 示例: 示例 1 : 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5] 示例 2 : 输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,

胡萝卜 211

每日一题:Leetcode 面试题 29.顺时针打印矩阵

题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 示例 1: 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5] 示例 2: 输入: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] 限制: 0 <...

qq_44584356的博客 500

遍历矩阵每一行穷举_leetcode54. 螺旋矩阵/面试题29. 顺时针打印矩阵

leetcode54. 螺旋矩阵与面试题29. 顺时针打印矩阵是同一道题给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。示例 1:输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] 输出: [1,2,3,6,9,8,7,4,5]示例 2:输入: [ [1, 2, 3, 4], [5, 6,...

weixin_39531780的博客 92

顺时针输出矩阵-思路+代码详解

题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。(leetcode面试题29 ) 输入: 1 2 3 4 5 6 7 8 9 输出: 1 2 3 6 9 8 7 4 5 思路介绍 首先我们可以分为两步走,一是外部大循环,二是内部遍历。 外部大循环 外部循环的大概方向如下图所示, (矩阵不一定是m x m的矩阵)。为了方便理解,我们采用5x5的矩阵画图解释,其中每一层循环的起点为matrix[start][start]。当每一外层循环完成后,strat++进入下一层循环。循环.

weixin_41978335的博客 2029
上一篇: 面试题19:二叉树的镜像&对称二叉树
下一篇: Linux下进程、线程同步几种方法
okiwilldoit
博客等级 码龄17年 86粉丝 283原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值