思路
1.矩阵遍历是顺时针遍历
2.先遍正序历数组第一个元素数组,再正序遍历数组每个元素数组的最后一个元素
3.再逆序遍历数组最后一个元素数组
4.再从下到上也就是(逆序)遍历每个数组的第一个元素。
这个是思路
具体执行
1. 一个state用来做状态存储,上面四个思路对应四个状态。
2.上面四个思路,每次遍历完都需要删除相对应元素或者数组
2. 使用while 循环,循环的条件就是 数组长度不为空;
下面是具体代码
/ * * @param matrix int整型二维数组 * @return int整型一维数组 */ function ddelete(matrix){ for (let i = matrix.length - 1; i >= 0; i--) { if (matrix[i].length == 0) { matrix.splice(i, 1); } } } function spiralOrder(matrix) { // write code here if (matrix.length === 0) return []; const arry = []; let state = 1; // var l = 0, r = matrix[0].length -1, // t = 0, b = matrix.length -1; while (matrix.length) { if (state == 1 && matrix.length) { for (let i = 0; i < matrix[0].length; i++) { arry.push(matrix[0][i]); } matrix.shift(); state = 2; } if (state == 2 && matrix.length) { for (let i = 0; i < matrix.length; i++) { arry.push(matrix[i].pop()); } ddelete(matrix); state = 3; } if (state == 3 && matrix.length) { const t = matrix[0].length - 1; const end = matrix.length - 1; for (let i = t; i >= 0; i--) { arry.push(matrix[end][i]); } matrix.pop(); state = 4; } if (state == 4 && matrix.length) { const end = matrix.length - 1; for (let i = end; i >= 0; i--) { arry.push(matrix[i].shift()); } ddelete(matrix); state = 1; } } return arry; } module.exports = { spiralOrder : spiralOrder };
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/229150.html原文链接:https://javaforall.net
