题目
来源:螺旋矩阵
给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。
示例
解题思路及代码
1. 思路
自己思考的时候:
m行,n列,第i行,第j列,
i = 0,j++ >> j = n-1,i++; >> i=m-1; j-- ; >> j=0;i-- >> i=1,j++ >> j=n-2,i++ >> i=m-2,j-- >> j=1,i-- >>…
虽然想到了可以改变m,n的大小来改变矩阵边界,竟然被困在了改变右边界和上边界。。。果然死脑筋。。。
思路:
实际上也是对矩阵进行一个遍历,只需要在每次遍历完每一行,则改变上边界或下边界值,遍历完每一列改变左边界或右边界值,直到上边界大于下边界或者左边界大于右边界,则遍历完。
2. 代码
var spiralOrder = function(matrix) {
var arr = [];
if (matrix.length == 0) {
return arr;
}
var m = matrix.length - 1;
var n = matrix[0].length - 1;
var u = 0;
var l = 0;
while (true) {
for (let i = l; i <= n; i++) {
arr.push(matrix[u][i]);
}
u++;
if(u > m) {
break;
}
for (let i = u; i <= m; i++) {
arr.push(matrix[i][n]);
}
n--;
if (n < l) {
break;
}
for (let i = n; i >= l; i--) {
arr.push(matrix[m][i]);
}
m--;
if (m < u) {
break;
}
for (let i = m; i >= u; i--) {
arr.push(matrix[i][l]);
}
l++;
if (l > n) {
break;
}
}
return arr;
};