当前位置: 首页 > news >正文

54. 螺旋矩阵

题目链接:


     a54. 螺旋矩阵

题目描述:

给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

题目分析:

改题目需要判断是否溢出边界,与59不同,59可以判断是否为0来作为溢出条件,此题可以建立一个是否遍历过的数组来作为判断溢出的条件
本方法为通过定义上下左右四个边界来判断,每个方向遍历结束之后将x,y置为下一个位置
​​​​​​​从第二个位置开始遍历和赋值,每个重合的角让当前循环来赋值,而代码随想录上解析是让下一个循环来赋值,有兴趣的可以看代码随想录b站视频

题解:

/*** Note: The returned array must be malloced, assume caller calls free().*/
int* spiralOrder(int** matrix, int matrixSize, int* matrixColSize, int* returnSize) {*returnSize = matrixSize * *matrixColSize;// 定义遍历坐标x,y从(0,1)开始int x = 0;int y = 1;// 定义赋值时返回数组的角标int i = 1;// 为返回数组分配空间int *arr = (int *)malloc(sizeof(int) * matrixSize * *matrixColSize);// 定义四个边界上下左右int top = 0;int bottom = matrixSize;int left = 0;int right = matrixColSize[0];// 为初始位置赋值arr[0] = matrix[0][0];while(top <= bottom && left <= right){// 先向右遍历矩阵,直到越界// 当此次循环向右遍历完成之后,还要继续向下执行,所以要判断i是否小于返回数组的大小,以防越界// 向右遍历时可以不进行判断i是否溢出,但剩下三个必须判断while(y < right && i < *returnSize){arr[i++] = matrix[x][y++];}// 上边界缩小top++;// 将y赋值为不越界的状态,且x指向下一行,即将x,y指向下一个遍历的位置y--;x++;// 向下遍历矩阵,直到溢出边界,需要判断i是否产生溢出while(x < bottom && i < *returnSize){arr[i++] = matrix[x++][y];}// 右边界缩小right--;// 将x赋值为不越界的状态,且y指向上一列,即将x,y指向下一个遍历的位置x--;y--;// 向左遍历矩阵,直到溢出边界,需要判断i是否产生溢出while(y >= left && i < *returnSize){arr[i++] = matrix[x][y--];}// 下边界缩小bottom--;// 将x,y指向下一个遍历的位置y++;x--;// 向上遍历矩阵,直到溢出边界,需要判断i是否产生溢出while(x >= top && i < *returnSize){arr[i++] = matrix[x--][y];}// 下边界缩小left++;// 将x,y指向下一个遍历的位置x++;y++;// 若未遍历完数组,进行下一次循环}return arr;
}

http://www.xdnf.cn/news/490447.html

相关文章:

  • redis缓存实战
  • 地球系统模式(CESM)实践技术应用
  • Ubuntu系统安装docker仓库教程
  • C#学习教程(附电子书资料)
  • Excel MCP: 自动读取、提炼、分析Excel数据并生成可视化图表和分析报告
  • day 25
  • Vue 2.0学习
  • 播放进度条小组件
  • 如何借助iPaaS集成平台做好API 版本管理
  • 记录一次vue项目页面内嵌iframe页面实现跨域上传和下载附件的功能
  • PT2031K单触控单输出触摸IC
  • UI自动化测试中,一个完整的断言应所需要考虑的问题
  • 基于SpringBoot的房屋租赁管理系统
  • 有什么软件系统可以高效管理工地现场物资材料?
  • C语言—指针4
  • 【Manim】使用manim画一个高斯分布的动画
  • Java【13_2】多态、根父类
  • 【已解决】Parsing error: No Babel config file detected for E:\
  • MCP概述及MCP Server的使用和实现(谷歌ADK使用MCP Server)
  • 如何在 Windows 上安装类似 Synaptic 的 Chocolatey GUI 包管理器
  • 哈希表的实现02
  • java18
  • 理解位图算法:使用 C++ 实现高效数据查重
  • 4.1 多层感知机 MLP 笔记
  • C语言学习记录--深入理解指针(5)(qsort的练习)
  • Linux基础开发工具大全
  • 连续隐马尔可夫离散隐马尔科夫模型的MATLAB实现
  • falsk-ORM的使用-数据库表的创建
  • 【Linux】动静态库链接原理
  • nnUNet V2代码——图像增强(三)