leetcode 54. 螺旋矩阵 js高效实现
2023-06-13 09:15:12 时间
给你一个 m
行 n
列的矩阵 matrix
,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
示例 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]
https://leetcode.cn/problems/spiral-matrix/description/
// 空间复杂度:O(1)
// 时间复杂度:O(mn),其中 mmm 和 nnn 分别是输入矩阵的行数和列数。矩阵中的每个元素都要被访问一次。
var spiralOrder = function(matrix) {
if(matrix.length === 0 ) return []
let res = []
// 分别定义 l:左边界,r:右边界,t:上边界,b:下边界
let l = 0,r = matrix[0].length - 1, t = 0, b = matrix.length - 1
// 为了让持续进入循环,通过内部判断超过边界值,来 break 跳出循环
while(true){
// 先从左至右,遍历第一行
for(let i = l;i <= r;i++) res.push(matrix[t][i])
// 同时将上边界+1,并判断当上边界超出下边界,则跳出循环
if(++t > b) break
// 从上至下,遍历最后一列
for(let i = t;i <= b;i++) res.push(matrix[i][r])
// 同时将右边界-1,并判断是否超出边界,超出则跳出循环
if(--r < l) break
// 从右至左,遍历最后一行
for(let i = r;i >= l;i--) res.push(matrix[b][i])
//同时将下边界-1 并判断是否超出上边界,超出跳出循环
if(--b < t) break
// 从左至右,遍历最左边一列
for(let i = b;i >= t;i--) res.push(matrix[i][l])
// 同时将左边界+1,并判断是否超出右边界,超出则跳出循环
if(++l > r ) break
}
// 返回最终生成的数组
return res
};
相关文章
- leetcode 415. 字符串相加 js 实现
- 【玩转 Cloud Studio】打造在线leetcode刷题神器
- leetcode 70. 爬楼梯 js实现
- LeetCode(Weekly Contest 190)题解
- LeetCode笔记:Weekly Contest 315
- leetcode 32. 最长有效括号 js实现
- 【刷题day06】力扣(LeetCode)每日一刷[21. 合并两个有序链表][206. 反转链表 ][392. 判断子序列]
- leetcode刷题(126)——1289. 下降路径最小和 II
- leetcode_两数之和
- 用javascript分类刷leetcode---动态规划
- 使用Js怒刷LeetCode
- JavaScript刷LeetCode之-双指针技巧(上)
- Leetcode 111. 二叉树的最小深
- 利用 JS 实现 Redis 的连接(js连接redis)
- 用SQL Server和JS实现数据库管理技术(sqlserver.js)
- JS在Oracle中的应用(js如何oracle)
- 远离JS灾难css灾难之js私有函数和css选择器作为容器
- js获取坐标通过JS得到当前焦点(鼠标)的坐标属性
- js获取url参数代码实例分享(JS操作URL)
- JS将所有对象s的属性复制给对象r(原生js+jquery)