给你一个 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]
提示:
m == matrix.length
n == matrix[i].length
1 <= m, n <= 10
-100 <= matrix[i][j] <= 100
解题思路
将二维数组的元素,按照顺时针 →↓←↑ 的顺序,将元素存入一维数组中
/**
* @param {number[][]} matrix
* @return {number[]}
*/
var spiralOrder = function(matrix) {
// 定义一个一维数组,用于存放元素
let results = []
// 如果二维数组为空,则结束循环
if (matrix == null || matrix.length == 0) {return results}
// 限制上下左右边界
let u = 0, d = matrix.length - 1, l = 0, r = matrix[0].length - 1
while(true)
{
// 从左到右
for (let i = l; i <= r; i ++ ) {results.push(matrix[u][i])} ++ u
if (u > d) {break}
// 从上到下
for (let i = u; i <= d; i ++ ) {results.push(matrix[i][r])} -- r
if(r < l) {break}
// 从右到左
for (let i = r; i >= l; i -- ) {results.push(matrix[d][i])} -- d
if (d < u) {break}
// 从下到上
for (let i = d; i >= u; i -- ) {results.push(matrix[i][l])} ++ l
if (l > r) {break}
}
return results
};
复杂度分析:
时间复杂度:O(m * n)
空间复杂度:O(1)