题目描述
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
输入输出
1 | 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] |
基本思路
按层模拟:可以将矩阵看成若干层,首先输出最外层的元素,其次输出次外层的元素,直到输出最内层的元素。
对于每层,从左上方开始以顺时针的顺序遍历所有元素。假设当前层的左上角位于 (top,left),右下角位于 (bottom,right),按照如下顺序遍历当前层的元素。
- 从左到右遍历上侧元素,依次为 (top,left) 到 (top,right)
- 从上到下遍历右侧元素,依次为 (top+1,right) 到 (bottom,right)
- 如果 left<right 且 top<bottom,则从右到左遍历下侧元素,依次为 (bottom,right−1) 到 (bottom,left+1),以及从下到上遍历左侧元素,依次为 (bottom,left) 到 (top+1,left)。
遍历完当前层的元素之后,将 left 和 top 分别增加 1,将 right 和 bottom 分别减少 1,进入下一层继续遍历,直到遍历完所有元素为止。
关键点:第16行需要这个if-else条件是因为为了防止出现[[3],[2]]
这样的矩阵 不加if-else会输出[3,2,2]
java实现
1 | class Solution { |