题目:
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
核心思路:
这种矩阵问题,我们首要就是要确认怎么遍历,本题可以抽象为一圈一圈的剥掉。
通过不断缩小上下左右的边界循环找,如果下边界大于了上边界或者左边界大于了右边界,说明遍历完了。
解:
var spiralOrder = function (matrix) {
if (!matrix || !matrix.length) {
return [];
}
let L = 0,
T = 0,
R = matrix[0].length - 1,
B = matrix.length - 1;
// 四个序号指针,限定范围
let res = [];
while (L <= R && T <= B) {
//遍历行
for (let i = L; i <= R; i++) {
res.push(matrix[T][i]);
}
// 剔除行,进入缩小矩阵行
++T;
if (T > B) {
break;
}
// 遍历列
for (let i = T; i <= B; i++) {
res.push(matrix[i][R])
}
// 剔除列,进入缩小矩阵列
--R;
if (L > R) {
break;
}
for (let i = R; L <= i; i--) {
res.push(matrix[B][i]);
}
--B;
if (T > B) {
break;
}
for (let i = B; T <= i; i--) {
res.push(matrix[i][L]);
}
++L;
if (L > R) {
break;
}
}
return res;
};