(js来啦)JavaScript题解


在其他题解里面看到了翻滚数组的想法,奈何那个语言没看懂,寻思自己撸一个javascript的 ``` function printMatrix(matrix) { // write code here const results = []; while (matrix.length) { let m = matrix.length; //每一次循环重新获取一遍行数和列数 let n = matrix[0].length;
            for (let j = 0; j < n - 1; j++) { results.push(matrix[0].shift()); } for (let i = 0; i < m - 1; i++) { results.push(matrix[i].pop()); } for (let k = 0; k < n-1; k++) { //不要在意循环变量的命名这种细节啦~( ̄▽ ̄)~* matrix[m - 1].length&&results.push(matrix[m - 1].pop()); //长度大于零时才pop,因为后面测试用例的输入就怪起来了,一片undefined,离谱 } for (let i = m - 1; i > 0; i--) {
                matrix[i].length&&results.push(matrix[i].shift());
            }
            matrix = matrix.filter((e) => e.length > 0);
            if (matrix.length == 1) { 
                return results.concat(matrix[0]);
            }
        }
        return results;
    }

```
解题思路:
首先可以将矩阵这样划分,他就可以翻滚起来了
图片说明
每四个为一次大循环,大循环内包括这里的四个小循环,分别通过数组的shift和pop方法可以使得矩阵的外圈消失,并依次push到results里存起来
一次大循环结束后通过filter过滤掉空的数组,
最后就是对于一些比较奇怪的测试用例做一些微调即可