给你一个 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 };
原文地址:http://www.cnblogs.com/beileixinqing/p/16864742.html
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,请务用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性