编辑代码

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param matrix int整型二维数组 
 * @return int整型一维数组
 */
function spiralOrder( matrix ) {
    if(matrix.length === 0){
        return [];
    }
    let m = matrix.length;
    let n = matrix[0].length;
    let km = parseInt( m / 2 );//有几轮
    let kn = parseInt( n / 2 );//有几轮
    let loopm = 0; let loopn = 0;
    let resultList = [];
    let i=0;let j=0;
    while(loopm<km && loopn<kn){
        //从左到右 x不变,y++,x=loop,y=loop~length - 1 -loop
        if(loopn<kn){
            i=loopm;j=loopn;
            for(;j<=n - 1 - loopn;j++){
                resultList.push(matrix[i][j]);
            }
        }
        //从上到下 y不变,x++;y=j-1,x = loop+1~length - 1 - loop
        if(loopm<km){
            i=loopm+1;j=j-1;
            for(;i<=m - 1 - loopm;i++){
                resultList.push(matrix[i][j]);
            }
        }
        //从右到左 x不变,y--,x=i-1,y=j-1~loop
        if(loopn<kn){
            i=i-1;j=j-1;
            for(;j>=loopn;j--){
                resultList.push(matrix[i][j]);
            }
        }
        //从下到上 y不变,x--,y=j+1;x=i-1~loop+1
        if(loopm<km){
            i=i-1;j=j+1;
            for(;i>=loopm+1;i--){
                resultList.push(matrix[i][j]);
            }
        }
        loopm++;loopn++;
    }
    if(m>n){
        //从上到下y不变,y=loopn,x++;x=loopn~m-1-loopn
        if(n%2 === 1){
            i=loopn;j=loopn;
            for(;i<=m-loopn-1;i++){
                resultList.push(matrix[i][j]);
            }
        }

    }else if(m<n){
        //从左到右x不变,x=loopm,y++,y=loopm~n-loopm-1
        if(m%2 === 1){
            i=loopm;j=loopm;
            for(;j<=n-loopm-1;j++){
                resultList.push(matrix[i][j]);
            }
        }
    }else{
        if(m%2 === 1){
            i=loopm;j=loopm;
            resultList.push(matrix[i][j]);
        }
    }
    return resultList;
}
module.exports = {
    spiralOrder : spiralOrder
};