LeetCode:剑指 Offer 29. 顺时针打印矩阵
发布日期:2022-09-10 02:21:51 浏览次数:7 分类:技术文章

本文共 1625 字,大约阅读时间需要 5 分钟。

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。

示例 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]

限制:

  • 0 <= matrix.length <= 100
  • 0 <= matrix[i].length <= 100

解题思路

1.首先对数组进行判空,然后定义left、right、top、bottom四个变量的值以及result结果数组,接着进行顺时针方向遍历

2.从左到右遍历,以 left 开始,right 结束,该行遍历完,向下移动一行,如果上边边界大于下边边界了,遍历完成,跳出。
3.从上到下遍历,以 top 开始,bottom结束,该列遍历完,向左移动一列,如果右边边界小于左边边界了,遍历完成,跳出
4.从右到左遍历,以 right 开始,left 结束,该行遍历完,向上移动一行,如果下边边界小于上边边界了,遍历完成,跳出
5.从下到上遍历,以 bottom 开始,top 结束,该列遍历完,向右移动一列,如果左边边界大于右边边界了,遍历完成,跳出

代码

/** * @param {number[][]} matrix * @return {number[]} */var spiralOrder = function(matrix) {
if(!matrix.length || !matrix[0].length) return []; let left = 0, right = matrix[0].length - 1, top = 0, bottom = matrix.length - 1, result = []; while(true) {
// 从左到右,以 left 开始,right 结束 for(let i = left; i <= right; i++) result.push(matrix[top][i]); if(++top > bottom) break; // 该行遍历完,向下移动一行,如果上边边界大于下边边界了,遍历完成,跳出 // 从上到下遍历,以 top 开始,bottom结束 for(let j = top; j <= bottom; j++) result.push(matrix[j][right]); if(--right < left) break; // 该列遍历完,向左移动一行,如果右边边界小于左边边界了,遍历完成,跳出 // 从右到左遍历,以 right 开始,left 结束 for(let i = right; i >= left; i--) result.push(matrix[bottom][i]); if(--bottom < top) break; // 该行遍历完,向上移动一行,如果下边边界小于上边边界了,遍历完成,跳出 // 从下到上遍历,以 bottom 开始,top 结束 for(let j = bottom; j >= top; j--) result.push(matrix[j][left]); if(++left > right) break; // 该列遍历完,向右移动一行,如果左边边界大于右边边界了,遍历完成,跳出 } return result;};

转载地址:https://blog.csdn.net/Bertil/article/details/124585873 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:LeetCode:剑指 Offer 38. 字符串的排列
下一篇:LeetCode:剑指 Offer 27. 二叉树的镜像

发表评论

最新留言

很好
[***.229.124.182]2024年03月29日 08时52分15秒