力扣刷题-螺旋矩阵

简介: 力扣刷题-螺旋矩阵

题目

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

输入: matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出: [1,2,3,6,9,8,7,4,5]

题解

这道题很多人看到了会一脸懵,这道题的意思是我们先走1>2>3,到了3之后往下走3>6>9到了9之后往左边走,9>8>7到了7之后往上走,7>4这里不能在往前走了,因为1我们已经走过了,到了4之后我们在走4>5,最后行程了我们当前看到的1>2>3>6>9>8>7>4>5,这道题的难点在于边界的问题

我们根据刚刚分析的得出,它所去读取数字的方向为右下左上的顺序,我们去定义四个边界变量以及当前所行走的方向,添加一个while循环判断条件为当左边界小于等于右边界且上边界小于等于下边界时执行,这也是这道题最复杂的地方,按照右下左上的顺序,我们依次将路径上的字符添加到结果中,最后while循环结束,返回结果

/**
 * @param {number[][]} matrix
 * @return {number[]}
 */
var spiralOrder = function(matrix) {
if(!matrix.length)return [];
// 定义上边界
let top=0;
// 定义下边界
let bottom =matrix.length-1;
// 定义左边界
let left=0;
// 定义右边界
let right =matrix[0].length-1;
// 定义开始方向
let direction="right";
// 定义接收结果数组
let result=[]
// 循环并添加判断条件
while(left<=right&&top<=bottom){
    if(direction=='right'){
        for(let i=left;i<=right;i++){
// 将数据添加到结果数据中
result.push(matrix[top][i])
        }
        top++;
        // 方向改变向下
        direction="down"
    }else if(direction=="down"){
        // 方向向下执行
        for(let i=top;i<=bottom;i++){
// 将数据添加到结果数据中
result.push(matrix[i][right])
        right--;
        // 方向改变向左
        direction="left"
        }
    }else if(direction=="left"){
        // 方向向左执行
        for(let i=right;i>=left;i--){
// 将数据添加到结果数据中
result.push(matrix[bottom][i])
        bottom--;
        // 方向改变向上
        direction="top"
        }
    }else if(direction=="top"){
        // 方向向上执行
        for(let i=bottom;i>=top;i--){
// 将数据添加到结果数据中
result.push(matrix[i][left])
        left++;
        // 方向改变向右
        direction="right"
        }
    }
    // 将结果返回
    return result
}
};

坚持努力,无惧未来!

相关文章
|
2月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
57 6
|
3月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
114 2
|
1月前
|
C++
Leetcode第54题(螺旋矩阵)
这篇文章介绍了LeetCode第54题“螺旋矩阵”的解题思路和C++的实现代码,该题目要求按照顺时针螺旋顺序返回给定矩阵中的所有元素。
14 1
Leetcode第54题(螺旋矩阵)
|
20天前
|
机器学习/深度学习 人工智能 自然语言处理
280页PDF,全方位评估OpenAI o1,Leetcode刷题准确率竟这么高
【10月更文挑战第24天】近年来,OpenAI的o1模型在大型语言模型(LLMs)中脱颖而出,展现出卓越的推理能力和知识整合能力。基于Transformer架构,o1模型采用了链式思维和强化学习等先进技术,显著提升了其在编程竞赛、医学影像报告生成、数学问题解决、自然语言推理和芯片设计等领域的表现。本文将全面评估o1模型的性能及其对AI研究和应用的潜在影响。
16 1
|
2月前
|
数据采集 负载均衡 安全
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
本文提供了多个多线程编程问题的解决方案,包括设计有限阻塞队列、多线程网页爬虫、红绿灯路口等,每个问题都给出了至少一种实现方法,涵盖了互斥锁、条件变量、信号量等线程同步机制的使用。
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
|
1月前
【LeetCode 05】螺旋矩阵II总结
【LeetCode 05】螺旋矩阵II总结
14 0
|
3月前
|
算法
LeetCode第59题螺旋矩阵 II
LeetCode第59题"螺旋矩阵 II"的解题方法,通过模拟螺旋填充过程,一圈一圈从外到内按顺序填充数字,直到完成整个矩阵的构建。
LeetCode第59题螺旋矩阵 II
|
3月前
|
存储 算法
LeetCode第54题螺旋矩阵
LeetCode第54题"螺旋矩阵"的解题方法,通过模拟从外到内的螺旋遍历过程,并利用方向向量控制遍历方向的转换,有效输出矩阵的螺旋顺序。
LeetCode第54题螺旋矩阵
|
3月前
|
索引 Python
【Leetcode刷题Python】从列表list中创建一颗二叉树
本文介绍了如何使用Python递归函数从列表中创建二叉树,其中每个节点的左右子节点索引分别是当前节点索引的2倍加1和2倍加2。
56 7