顺时针打印矩阵

102 阅读1分钟

顺时针打印矩阵

题目描述

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。

示例

输入: 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的加减,但是一直会取到重复元素,所以还是采用了记录是否访问过这种逻辑来解题目