【算法-LeetCode】59. 螺旋矩阵 II(二维数组)
2021/11/13 17:11:09
本文主要是介绍【算法-LeetCode】59. 螺旋矩阵 II(二维数组),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
59. 螺旋矩阵 II - 力扣(LeetCode)
文章起笔:2021年11月13日15:01:40
问题描述及示例
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
示例 1:
输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
示例 2:
输入:n = 1
输出:[[1]]
提示
1 <= n <= 20
我的题解(二维数组遍历)
此前做过一道螺旋数组遍历的题目,可做参考:
参考:【算法-LeetCode】54. 螺旋矩阵(二维数组)_赖念安的博客-CSDN博客
本题的思路和上面基本一致,就是把遍历时的取值操作变为了赋值操作罢了。具体的讲解可到上述博客中查看,这里就不赘述了。
/** * @param {number} n * @return {number[][]} */ var generateMatrix = function(n) { // count作为一个全局变量记录往当前遍历元素所赋的值,注意它的初始值为1,因为下面的遍历 // 中,我用的是count++来更新计数器,如果下面使用的是++count,则此处应当初始化为0 // 有关count++和++count的区别,可以参看下方【有关参考】中的相关链接 let count = 1; // 创建一个指定长宽的二维矩阵,该矩阵将作为最终的返回值返回 let matrix = Array.from({length: n}). map( () => Array.from({length: n}).fill(0) ); // 后续的操作和之前那道题就基本一致了 let wrapperNum = Math.ceil(n / 2); for (let i = 0; i < wrapperNum; i++) { traverseWrapper(matrix, [i, n - 1 - i, i, n - 1 - i]); } return matrix; // traverseWrapper用于遍历arr数组的某一圈,遍历范围由range指定 // 这里的逻辑和之前的那道题一样,只不过把取值操作变为了赋值操作, // 而且注意下面我更新计数器的值时,用的是count++ function traverseWrapper(arr, range) { for (let i = range[0]; i <= range[1] - 1; i++) { arr[range[2]][i] = count++; } for (let i = range[2]; i <= range[3]; i++) { arr[i][range[1]] = count++; } for (let i = range[1] - 1; i >= range[0] + 1; i--) { if (range[2] === range[3]) { break; } arr[range[3]][i] = count++; } for (let i = range[3]; i >= range[2] + 1; i--) { if (range[0] === range[1]) { break; } arr[i][range[0]] = count++; } } }; 提交记录 执行结果:通过 20 / 20 个通过测试用例 执行用时:64 ms, 在所有 JavaScript 提交中击败了90.53%的用户 内存消耗:37.7 MB, 在所有 JavaScript 提交中击败了89.13%的用户 时间:2021/11/13 15:05
官方题解
更新:2021年7月29日18:43:21
因为我考虑到著作权归属问题,所以【官方题解】部分我不再粘贴具体的代码了,可到下方的链接中查看。
【更新结束】
更新:2021年11月13日15:06:32
参考:螺旋矩阵 II - 螺旋矩阵 II - 力扣(LeetCode)
【更新结束】
有关参考
更新:2021年11月13日15:12:29
参考:【算法-LeetCode】54. 螺旋矩阵(二维数组)_赖念安的博客-CSDN博客
参考:在程序开发中,++i 与 i++的区别在哪里? - 知乎
这篇关于【算法-LeetCode】59. 螺旋矩阵 II(二维数组)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-24怎么切换 Git 项目的远程仓库地址?-icode9专业技术文章分享
- 2024-12-24怎么更改 Git 远程仓库的名称?-icode9专业技术文章分享
- 2024-12-24更改 Git 本地分支关联的远程分支是什么命令?-icode9专业技术文章分享
- 2024-12-24uniapp 连接之后会被立马断开是什么原因?-icode9专业技术文章分享
- 2024-12-24cdn 路径可以指定规则映射吗?-icode9专业技术文章分享
- 2024-12-24CAP:Serverless?+AI?让应用开发更简单
- 2024-12-23新能源车企如何通过CRM工具优化客户关系管理,增强客户忠诚度与品牌影响力
- 2024-12-23原创tauri2.1+vite6.0+rust+arco客户端os平台系统|tauri2+rust桌面os管理
- 2024-12-23DevExpress 怎么实现右键菜单(Context Menu)显示中文?-icode9专业技术文章分享
- 2024-12-22怎么通过控制台去看我的页面渲染的内容在哪个文件中呢-icode9专业技术文章分享