leetcode 螺旋矩阵算法题解 All In One
leetcode 螺旋矩阵算法题解 All In One
js / ts 实现螺旋矩阵
LeetCode 54. Spiral Matrix
"use strict";
/**
*
* @author xgqfrms
* @license MIT
* @copyright xgqfrms
* @created 2022-06-08
* @modified
*
* @description 54. 螺旋矩阵
* @description 54. Spiral Matrix
* @difficulty Medium
* @complexity O(n)
* @time O(n)
* @augments
* @example
* @link https://leetcode.com/problems/spiral-matrix/
* @link https://leetcode.cn/problems/spiral-matrix/
* @solutions
*
* @best_solutions
*
*/
// export {};
const log = console.log;
/**
* @param {number[][]} matrix
* @return {number[]}
*/
function spiralOrder(matrix: number[][]): number[] {
const result: number[] = [];
// 行
const m = matrix.length;
// 列
const n = matrix[0].length;
// 仅有 1行或 1列,直接展平 matrix 即可
if(m === 1 || n === 1) {
// return matrix.reduce((acc, arr) => acc.concat(arr), []);
return matrix.flat();
}
// solution 2: 遍历; 模拟,visited 标记矩阵 (麻烦,复杂度较高) \U0001f44e
// solution 1: 遍历:按层次处理,一层一层的剥洋葱 left, right, top, bottom 四个顶点 \U0001f680
// 左右,看列
let left = 0;
let right = n - 1;
// 上下,看行
let top = 0;
let bottom = m - 1;
// 按层遍历
while(left <= right && top <= bottom) {
// 最后剩的一层一定仅包含 Top 或 Top + Right
// 上边
for(let i = left; i <= right; i++) {
// (top, left) => (top, right)
result.push(matrix[top][i]);
}
// 右边
for(let i = top + 1; i <= bottom; i++) {
// (top + 1, right) => (bottom, right)
result.push(matrix[i][right]);
}
// 关键条件 ✅ (是否存在 matrix 下边或左边, 排除 left === right 或 top === bottom 导致的循环)
// left < right && top < bottom
if(left < right && top < bottom) {
// 下边
for(let i = right - 1; i >= left + 1; i--) {
// (bottom, right - 1) => (bottom, left + 1)
result.push(matrix[bottom][i]);
}
// 左边
for(let i = bottom; i >= top + 1; i--) {
// (bottom, left) => (top + 1, left)
result.push(matrix[i][left]);
}
}
// 更新迭代条件
left += 1;
right -= 1;
top += 1;
bottom -= 1;
}
return result;
};
/*
// test cases
[[1,2,3],[4,5,6],[7,8,9]]
[[1,2,3],[4,5,6],[7,8,9],[10,11,12]]
[[1,2,3,4],[5,6,7,8],[9,10,11,12]]
[[2,5,8],[4,0,-1]]
[[1,2,3,4,5,6,7,8,9,10],[11,12,13,14,15,16,17,18,19,20]]
[[23,18,20,26,25],[24,22,3,4,4],[15,22,2,24,29],[18,15,23,28,28]]
https://leetcode.com/problems/spiral-matrix/
https://leetcode.cn/problems/spiral-matrix/
LeetCode 59. 螺旋矩阵 II
https://leetcode.com/problems/spiral-matrix-ii/
https://leetcode.cn/problems/spiral-matrix-ii/
leetcode 题解 / LeetCode Solutions
https://www.youtube.com/results?search_query=+Leetcode+54
https://www.youtube.com/playlist?list=PLamwFu9yMruCBtS2tHUD77oI_Wsce-syE
https://www.youtube.com/channel/UCftIXZeipv4MTVwmfFphtYw/videos
类似问题
LeetCode 48. Rotate Image 旋转图像
LCCI 01.07. Rotate Matrix 旋转矩阵
refs
https://leetcode.com/explore/featured/card/top-interview-questions-easy/
©xgqfrms 2012-2020
www.cnblogs.com/xgqfrms 发布文章使用:只允许注册用户才可以访问!
原创文章,版权所有©️xgqfrms, 禁止转载 🈲️,侵权必究⚠️!
本文首发于博客园,作者:xgqfrms,原文链接:https://www.cnblogs.com/xgqfrms/p/16574373.html
未经授权禁止转载,违者必究!