C++如何实现螺旋矩阵
发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,这篇文章主要介绍"C++如何实现螺旋矩阵"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"C++如何实现螺旋矩阵"文章能帮助大家解决问题。Spiral Matri
千家信息网最后更新 2025年01月22日C++如何实现螺旋矩阵
这篇文章主要介绍"C++如何实现螺旋矩阵"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"C++如何实现螺旋矩阵"文章能帮助大家解决问题。
Spiral Matrix II 螺旋矩阵之二
Given a positive integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.
Example:
Input: 3
Output:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
此题跟之前那道 Spiral Matrix 本质上没什么区别,就相当于个类似逆运算的过程,这道题是要按螺旋的顺序来填数,由于给定矩形是个正方形,我们计算环数时用 n / 2 来计算,若n为奇数时,此时最中间的那个点没有被算在环数里,所以最后需要单独赋值,还是下标转换问题是难点,参考之前 Spiral Matrix 的讲解来转换下标吧,参见代码如下:
解法一:
class Solution {public: vector> generateMatrix(int n) { vector > res(n, vector (n)); int val = 1, p = n; for (int i = 0; i < n / 2; ++i, p -= 2) { for (int col = i; col < i + p; ++col) res[i][col] = val++; for (int row = i + 1; row < i + p; ++row) res[row][i + p - 1] = val++; for (int col = i + p - 2; col >= i; --col) res[i + p - 1][col] = val++; for (int row = i + p - 2; row > i; --row) res[row][i] = val++; } if (n % 2 != 0) res[n / 2][n / 2] = val; return res; }};
当然我们也可以使用下面这种简化了坐标转换的方法,博主个人还是比较推崇下面这种解法,不容易出错,而且好理解,参见代码如下:
解法二:
class Solution {public: vector> generateMatrix(int n) { vector > res(n, vector (n)); int up = 0, down = n - 1, left = 0, right = n - 1, val = 1; while (true) { for (int j = left; j <= right; ++j) res[up][j] = val++; if (++up > down) break; for (int i = up; i <= down; ++i) res[i][right] = val++; if (--right < left) break; for (int j = right; j >= left; --j) res[down][j] = val++; if (--down < up) break; for (int i = down; i >= up; --i) res[i][left] = val++; if (++left > right) break; } return res; }};
关于"C++如何实现螺旋矩阵"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。
螺旋
矩阵
C++
知识
解法
下标
代码
方法
行业
过程
还是
问题
不同
实用
没什么
个人
内容
坐标
奇数
实用性
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
南京市铭俊创软件开发有限公司
常见数据库汉语读音
政府软件开发项目招投标
软件开发服务概述
焦作去哪学计算机网络技术
java 软件开发框架
成都软件开发价钱
信息网络安全培训
广电网络技术能手考试
网络安全宣讲课后讨论
数据库关键字检索
关于网络安全的利与蔽
移动云服务器被勒索可以索赔吗
初一网络安全征文1000字
级联删除数据库
广州炎阳软件开发有限公司
周村考勤管理oa软件开发公司
如何保护好家中的网络安全
好友服务器
oracle数据库 er
开展网络安全专项工作情况
ps5cod18连不上服务器
世界互联网大会 网宿科技
大型软件开发困难及原因
秦皇岛扬灵软件开发有限公司
网络安全工程师与渗透工程师
怎样设置静态文件服务器
打印机服务器格式
丹东悠逸网络技术有限公司分公司
java进行数据库删除