顺时针打印矩阵
题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
示例
输入: matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出: [1,2,3,6,9,8,7,4,5]
解法:
/**
* @param {number[][]} matrix
* @return {number[]}
*/
// 循环--记录是否访问过
var spiralOrder = function(matrix) {
let m=matrix.length;
let n;
if(matrix[0]){
n=matrix[0].length;
}else{
return [];
}
let min=Math.ceil(Math.min(m,n)/2);
let temp=0;
const res=[];
let i,j;
while(temp!==min){
i=temp;
j=temp;
for(;j<n-temp;j++){
if(matrix[i][j]!==false){
res.push(matrix[i][j]);
}
matrix[i][j]=false
}
j--;
i++;
for(;i<m-temp;i++){
if(matrix[i][j]!==false){
res.push(matrix[i][j]);
}
matrix[i][j]=false
}
i--;j--;
for(;j>=temp;j--){
if(matrix[i][j]!==false){
res.push(matrix[i][j]);
}
matrix[i][j]=false
}
j++;
i--;
for(;i>temp;i--){
if(matrix[i][j]!==false){
res.push(matrix[i][j]);
}
matrix[i][j]=false
}
temp++;
}
return res;
};
我想说
这个写的很不好 一直在绕坑 本来想不记录是否拿过数组中的元素来直接做 i和j的加减,但是一直会取到重复元素,所以还是采用了记录是否访问过这种逻辑来解题目